copy的一份opencv视频抓取代码

忘了源地址了,代码粘在这里。

import cv2
import numpy as np

### auther:cheng
### time:20210410

import cv2
import numpy as np


def OnMouseAction(event, x, y, flags, param):
    global coor_x, coor_y, coor, num_list_pro, num_list
    global counter
    if event == cv2.EVENT_LBUTTONDOWN:
        counter = counter + 1  # 每点击一次计数器+1
        if (counter % 2 == 0):  # 每两个点更新一下pro值
            num_list_pro += 2
            num_list.append(num_list_pro)  # 得到列表 [1,3,5]
        coor_x, coor_y = x, y
        coor_m = [coor_x, coor_y]
        coor = np.row_stack((coor, coor_m))
    elif event == cv2.EVENT_LBUTTONUP:
        cv2.line(img, (coor_x, coor_y), (coor_x, coor_y), (255, 255, 0), 7)


def video_info(camera, fps):
    if (camera.isOpened()):  # 判断视频是否成功打开
        print('视频已打开')
    else:
        print('视频打开失败!')
    print('视频帧率:%d fps' % fps)  # 获取视频帧率
    size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),
            int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    print('原视频尺寸:' + str(size))  # 输出视频尺寸


def get_chosse_action(img, OnMouseAction):
    while True:
        cv2.imshow('IImage', img)
        cv2.setMouseCallback('IImage', OnMouseAction)
        k = cv2.waitKey(1) & 0xFF
        if k == ord(' '):  # 空格完成退出操作
            break
    cv2.destroyAllWindows()  # 关闭页面


def output_choose_vedio(fourcc, fps, coor, frame, num_i, out):
    # Width_choose = coor[num_i+1,0]-coor[num_i,0]
    # Height_choose = coor[num_i+1, 1] - coor[num_i, 1]
    # out = cv2.VideoWriter('output_test%d.avi' %int(num_i / 2),fourcc, fps, (Width_choose,Height_choose))
    Video_choose = frame[coor[num_i, 1]:coor[num_i + 1, 1], coor[num_i, 0]:coor[num_i + 1, 0]]
    out.write(Video_choose)
    cv2.imshow('Video_choose %d' % int(num_i / 2), Video_choose)
    cv2.rectangle(frame, tuple(coor[num_i, :]), tuple(coor[num_i + 1, :]), (0, 255, 0), 2)


coor_x, coor_y = -1, 0  # 初始值并无意义,只是先定义一下供后面的global赋值改变用于全局变量
coor = np.array([[1, 1]])

counter = 0  # 计数器
num_list_pro = -1  # 生成每个num_i,每两个点生成
num_list = []  # 将得到的num_i 存入列表,最后的形式[1,3,5,7·····]
out_list = []

fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 使用XVID编码器
camera = cv2.VideoCapture('D:\code\SegNet-pytorch\data\\val\output_test0.avi')  # 从文件读取视频,Todo:只需要修改成自己的视频路径即可进行测试
fps = camera.get(cv2.CAP_PROP_FPS)  # 获取视频帧率
grabbed, img = camera.read()  # 逐帧采集视频流
video_info(camera, fps)
get_chosse_action(img, OnMouseAction)


def main():
    for value in num_list:
        Width_choose = coor[value + 1, 0] - coor[value, 0]
        Height_choose = coor[value + 1, 1] - coor[value, 1]
        out = cv2.VideoWriter('D:\code\SegNet-pytorch\data\\val\output.avi' % int(value / 2), fourcc, fps, (Width_choose, Height_choose))
        print(out)
        out_list.append(out)

    while True:
        grabbed, frame = camera.read()  # 逐帧采集视频流,如果读取结束则退出
        if not grabbed:
            break

        for value in num_list:
            out = out_list[int(value / 2)]
            output_choose_vedio(fourcc, fps, coor, frame, value, out)

        cv2.imshow('video', frame)  # 显示采集到的视频流
        key = cv2.waitKey(1) & 0xFF
        if key == ord('q'):  # 按Q推出
            break

    # out.release()
    camera.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main()

由于年龄预测需要大量的数据和算法支持,所以本代码只提供一个基本的思路,具体实现需要使用相关的库和算法。 1. 导入所需的库和模块 ```python import cv2 import numpy as np import dlib ``` 2. 加载人脸检测器和预训练的年龄预测模型 ```python detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") age_model = cv2.dnn.readNetFromCaffe("age_deploy.prototxt", "age_net.caffemodel") ``` 3. 定义函数来检测人脸并提取面部特征 ```python def get_face_features(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) rects = detector(gray, 1) if len(rects) == 0: return None, None shape = predictor(gray, rects[0]) face = np.zeros((68, 2), dtype=np.int) for i in range(0, 68): face[i] = (shape.part(i).x, shape.part(i).y) return gray, face ``` 4. 定义函数来预测人物年龄 ```python def predict_age(img): gray, face = get_face_features(img) if gray is None or face is None: return None # 确定面部区域 (x, y, w, h) = cv2.boundingRect(face) # 处理面部图像 face_img = gray[y:y+h, x:x+w].copy() face_img = cv2.resize(face_img, (224, 224)) face_img = cv2.cvtColor(face_img, cv2.COLOR_GRAY2RGB) face_img = np.transpose(face_img, (2, 0, 1)) # 进行年龄预测 age_model.setInput(cv2.dnn.blobFromImage(face_img)) age_preds = age_model.forward() age = int(age_preds[0].dot(np.arange(0, 101).reshape(101, 1)).flatten()[0]) return age ``` 5. 加载测试图像并进行预测 ```python img = cv2.imread("test.jpg") age = predict_age(img) print("Predicted age:", age) ``` 注意:以上代码仅提供一个基本的思路,具体实现需要使用相关的库和算法,如dlib、OpenCV、Caffe等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值