import os
import json
deatil_data=r''
save_path=""
for i in os.listdir(deatil_data):
if not i.endswith('json'):
continue
temp_data=os.path.join(deatil_data,i)
print(temp_data)
with open(temp_data,"r",encoding='utf8')as f:
data=json.loads(f.read())
template_data = {
"version": "3.16.7",
"flags": {},
"shapes": [],
"lineColor": [
0,
255,
0,
128
],
"fillColor": [
255,
0,
0,
128
],
"imagePath": data['imagePath'],
"imageHeight": data['imageHeight'],
"imageWidth": data['imageWidth'],
"imageData": data['imageData'],
}
shapes=[]
for j in data['shapes']:
dict_point={
"label":j['label'],
"line_color":None,
"fill_color":None,
"points":j['points'],
"shape_type":j['shape_type'],
"flags":{}
}
shapes.append(dict_point)
template_data['shapes']=shapes
with open(temp_data,"w",encoding='utf-8')as ff:
ff.write(json.dumps(template_data,ensure_ascii=False,indent=4))
cv2.VideoCapture.get(0) 视频文件的当前位置(播放)以毫秒为单位
cv2.VideoCapture.get(1) 基于以0开始的被捕获或解码的帧索引
cv2.VideoCapture.get(2) 视频文件的相对位置(播放):0=电影开始,1=影片的结尾。
cv2.VideoCapture.get(3) 在视频流的帧的宽度
cv2.VideoCapture.get(4) 在视频流的帧的高度
cv2.VideoCapture.get(5) 帧速率
cv2.VideoCapture.get(6) 编解码的4字-字符代码
cv2.VideoCapture.get(7) 视频文件中的帧数
cv2.VideoCapture.get(8) 返回对象的格式
cv2.VideoCapture.get(9) 返回后端特定的值,该值指示当前捕获模式
cv2.VideoCapture.get(10) 图像的亮度(仅适用于照相机)
cv2.VideoCapture.get(11) 图像的对比度(仅适用于照相机)
cv2.VideoCapture.get(12) 图像的饱和度(仅适用于照相机)
cv2.VideoCapture.get(13) 色调图像(仅适用于照相机)
cv2.VideoCapture.get(14) 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
cv2.VideoCapture.get(15) 曝光(仅适用于照相机)
cv2.VideoCapture.get(16) 指示是否应将图像转换为RGB布尔标志
cv2.VideoCapture.get(17) × 暂时不支持
cv2.VideoCapture.get(18) 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能
opencv 提供了绘制直线、圆形、矩形等基本绘图的功能
1、绘直线
cv2.line(画布,起点坐标,终点坐标,颜色,宽度) 例如: cv2.line(image,(20,60),(300,400),(0,0,255),2)
2、绘矩形
cv2.rectange(画布,起点,终点,颜色,宽度) 若宽度大于0,标识边线宽度;如果小于0,表示画实心矩形 cv2.rectange(image,(20,60),(300,400),(255,0,0),-1)
3、绘圆形
cv2.circle(画布,圆心坐标,半径,颜色,宽度) 若宽度大于0,标识边线宽度;如果小于0,表示画实心圆行 cv2.circle(image,(300,300),40,(0,255,0),2)
urlencode加密
# urlencode加密
import urllib.parse
text = "我爱吃鸡腿"
s = urllib.parse.quote(text)
print(s) # %E6%88%91%E7%88%B1%E5%90%83%E9%B8%A1%E8%85%BF
u = urllib.parse.unquote(s)
print(u) #我爱吃鸡腿
import cv2,os
# 统计视频
def count_video_duration(file_path):
cap = cv2.VideoCapture(file_path)
if cap.isOpened(): # 当成功打开视频时cap.isOpened()返回True,否则返回False
# get方法参数按顺序对应下表(从0开始编号)
rate = cap.get(5) # 帧速率
FrameNumber = cap.get(7) # 视频文件的帧数
duration = FrameNumber / rate
return int(duration)
else:
return 0
# 递归获取视频路径进行统计时长
def count_video_duration_recursion(file_path):
global duration_video
if os.path.isdir(file_path):
for file in os.listdir(file_path):
count_video_duration_recursion(os.path.join(file_path, file))
else:
if file_path.endswith('.mp4') or file_path.endswith('.avi')or file_path.endswith('.3gp'):
duration = count_video_duration(file_path)
duration_video+=duration
print(file_path, duration)
duration_video = 0
path = "路径"
count_video_duration_recursion(path)
print(duration_video)
import cv2
def alpha2white_opencv2(img):
sp=img.shape
width=sp[0]
height=sp[1]
for yh in range(height):
for xw in range(width):
color_d=img[xw,yh]
if(color_d[3]==0):
img[xw,yh]=[255,255,255,255]
return img
对特定图像进行识别,最关键的是要有识别对象的特征文件。OpenCV已经内置了人脸识别特征文件,我们只要使用OpenCV的CascadeClassifier类即可进行识别。 语法: https://github.com/opencv/opencv.git 在这里可以下载特征文件,在data目录下 识别对象变量 = cv2.CascadeClassifier(特征文件)、、 识别对象 识别结果变量 = 识别对象变量.detectMultiScale(图片,参数1,参数2,。。。) 参数有: 1、scaleFactor: 其原理是系统会以不同的区块大小对图片进行扫描,在进行特征对比。此参数用户设置区块的改变倍数,如无特别需求,一般设置为1.1 2、minNeighbors 此为控制误检率参数,默认值为3 3、minSize 设置最小的识别区块 4、maxSize 设置最大的识别区块 5、flags 此参数设置检测模式,可取值如下: cv2.CV_HAAR_SCALE_IMAGE 按比例检测 cv2.CV_HAAR_DO_CANNY_PRUNING 利用Canny 边缘检测器排除一些边缘很少或很多的图像区域 cv2.CV_HAAR_FIND_BIGGEST_OBJECT 只检测最大物体 cv2.CV_HAAR_DO_ROUGH_SEARCH 只做初步检测 face = faceCascade.detectMultiScale(image,scakeFactor=1.1,minSize=(10,10),minNeighbors=5,flags = cv2.CASCADE_SCALE_IMAGE) detectMultiScale 方法可以识别多个面部,返回值是一个列表 for (x,y,w,h) in face: x,y 表示面部区域的左上角x,y坐标;w,h表示面部区域的宽度和高度
m4a文件转为16bit,单声道,采样率为48kHz
for i in *.m4a; do ffmpeg -i "$i" -acodec pcm_s16le -ac 1 -ar 48000 "${i%}.wav"; done
-acodec pcm_s16le:16bit
-ac 1:单声道
-ar 48000:48kHZ
import os
from PIL import Image
# 获取图片文件大小
def get_size(file):
# 获取文件大小:KB
size = os.path.getsize(file)
return size / 1024
# 拼接输出文件地址
def get_outfile(infile, outfile):
if outfile:
return outfile
dir, suffix = os.path.splitext(infile)
outfile = '{}-out{}'.format(dir, suffix)
return outfile
# 压缩图片方法(配置即可用_1007)
def compress_image(infile, outfile='', mb=600, step=10, quality=80):
# 判断该张图片是否压缩
if os.path.exists(outfile):
return
"""不改变图片尺寸压缩到指定大小
:param infile: 压缩源文件
:param outfile: 压缩文件保存地址
:param mb: 压缩目标,KB
:param step: 每次调整的压缩比率
:param quality: 初始压缩比率
:return: 压缩文件地址,压缩文件大小
"""
o_size = get_size(infile)
if o_size <= mb:
return infile
outfile = get_outfile(infile, outfile)
while o_size > mb:
im = Image.open(infile)
im.save(outfile, quality=quality)
if quality - step < 0:
break
quality -= step
o_size = get_size(outfile)
return outfile, get_size(outfile)
# 扩展压缩
a = r"C:\Users\DM\Desktop\图片过长\新建文件夹\1"
b = r"C:\Users\DM\Desktop\图片过长\新建文件夹\2"
for i in os.listdir(a):
in_file = os.path.join(a, i)
out_file = os.path.join(b, i)
print(in_file, out_file)
compress_image(in_file, out_file)
from PIL import Image
import os
from multiprocessing.pool import ThreadPool
# 获取图片文件大小
def get_size(file):
# 获取文件大小:KB
size = os.path.getsize(file)
return size / 1024
# 拼接输出文件地址
def get_outfile(infile, outfile):
if outfile:
return outfile
dir, suffix = os.path.splitext(infile)
outfile = '{}-out{}'.format(dir, suffix)
return outfile
# 压缩文件到指定大小
def compress_image(infile, outfile='', mb=500, step=10, quality=80):
# 判断该张图片是否压缩
if os.path.exists(outfile):
return
"""不改变图片尺寸压缩到指定大小
:param infile: 压缩源文件
:param outfile: 压缩文件保存地址
:param mb: 压缩目标,KB
:param step: 每次调整的压缩比率
:param quality: 初始压缩比率
:return: 压缩文件地址,压缩文件大小
"""
o_size = get_size(infile)
if o_size <= mb:
shutil.copyfile(infile,outfile)
return f"cp:{infile}>{outfile}"
outfile = get_outfile(infile, outfile)
while o_size > mb:
im = Image.open(infile)
im.save(outfile, quality=quality)
if quality - step < 0:
break
quality -= step
o_size = get_size(outfile)
return outfile, get_size(outfile)
# 默认600k,但是可能不会到600K,有的压缩不到
path_a = r"文件路径"
path_b = r"文件路径"
# 使用线程池提高速度
s = ThreadPool(12)
for i in os.listdir(path_a):
infile = os.path.join(path_a, i)
outfile = os.path.join(path_b, i)
# if os.path.exists(outfile):
# continue
print(infile)
s.apply_async(compress_image, args=(infile, outfile))
# compress_image(infile,outfile)
s.close()
s.join()