跳至主要內容
高版本labelme格式转换为低版本格式
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))


爱喝水的木子...小于 1 分钟codepythonlabelme
opencv video 相关参数
    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后端支持这个功能

爱喝水的木子...大约 1 分钟pythoncvpython
opencv 画图相关

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)


爱喝水的木子...大约 1 分钟pythonopencvpython
python常见的加解密

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) #我爱吃鸡腿

爱喝水的木子...大约 8 分钟pythonaespython
使用cv统计视频时长
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)


爱喝水的木子...小于 1 分钟pythonpythoncv文件视频
使用opencv进行人脸检测

对特定图像进行识别,最关键的是要有识别对象的特征文件。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表示面部区域的宽度和高度


爱喝水的木子...大约 2 分钟AIpythoncv检测
关于m4a文件转成wav文件

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

爱喝水的木子...小于 1 分钟codeffmpegpythoncode
压缩图片
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)

爱喝水的木子...小于 1 分钟codepython压缩图片
图片大小压缩
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()


爱喝水的木子...小于 1 分钟codepython图片压缩