Python 中用flask 通过socket实现实时摄像头传输到服务端,并使用YOLOv8实时检测人脸并返回给客户端呈现

这是客户端代码,主要功能是通过使用socket从一个客户端向服务端发送摄像头捕获的视频帧。 这段代码中的time.sleep(0.2)是为了控制发送帧的速度,cv2.waitKey(50)是等待50秒,如果在这段时间内按下任何键,将返回按键的ASCII码,否则返回-1。如果不控制发送帧的速度,容易产生粘包问题。

import socket
import time

import cv2
import numpy as np
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.1.249', 8888) #IP地址为服务端的IP地址,端口号任意
client_socket.connect(server_address)

cap = cv2.VideoCapture(0)  # 打开摄像头,0为默认摄像头


while True:
    ret, frame = cap.read()  # 获取视频的开启状态和每一帧图片
    img_encode = cv2.imencode('.jpg', frame)[1]  # 对每一帧图片进行编码
    data = np.array(img_encode)  # 转化为矩阵
    byte_encode = data.tobytes()  # 编码格式转为字节格式
    data_len = str(len(byte_encode))  # 获取每一帧图片的大小(字节数)
    print('每帧图片大小: %s' % data_len)
    client_socket.send(byte_encode)  # 发送给服务端呈现
    time.sleep(0.2)

    data = client_socket.recv(88888)  # 88888为接受的最大字节数,根据需要调整
    nparr = np.frombuffer(data, dtype='uint8')  # 化为数组
    img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)  # 解码为彩色图

    cv2.imshow('clint', img)
    cv2.waitKey(50)    # 等待50毫秒

client_socket.close()

这是服务端代码,它的主要功能是接收客户端发送的视频帧,然后使用YOLO模型进行人脸检测和识别,最后将识别后的图像发送回客户端。

import socket
import cv2
from ultralytics import YOLO
import numpy as np

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.1.249', 8888) #IP地址为服务端的IP地址,端口号任意
server_socket.bind(server_address)
server_socket.listen(1)
print('Server is listening...')

client_socket, client_address = server_socket.accept()
print('Connection from', client_address)
model = YOLO("yolov8n.yaml")
model = YOLO("yolov8n.pt")

while True:
    data = client_socket.recv(88888)  # 88888为接受的最大字节数(默认分辨率情况下图片也就3、4万字节)
    nparr = np.frombuffer(data, dtype='uint8')  # 化为数组
    img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)  # 解码为彩色图

    res = model.predict(img, classes=[0])  # classes=[0]表示只检测人这一类别
    img = res[0].plot()
    cv2.imshow('server', img)

    cv2.waitKey(50)
    img_encode = cv2.imencode('.jpg', img)[1]  # 对每一帧图片进行编码
    data = np.array(img_encode)  # 转化为矩阵
    byte_encode = data.tobytes()  # 编码格式转为字节格式
    client_socket.send(byte_encode)  # 发送数据


client_socket.close()
server_socket.close()

为了将YOLOv8目标检测模型集成到Web应用并通过Vue.js前端展示检测结果,你需要掌握YOLOv8模型的训练、Flask后端开发以及Vue前端界面构建的技能。首先,确保你已经训练了一个性能良好的YOLOv8模型。接下来,可以通过Flask框架创建RESTful API接口,将模型推理逻辑封装起来。例如,在Flask应用中定义一个接口,该接口接收前端发送的图像数据,使用YOLOv8模型进行目标检测,并返回检测结果。 参考资源链接:[基于YOLOv8Flask-Vue的目标检测毕设部署实现](https://wenku.csdn.net/doc/5uftgsb1pb) 在Vue.js前端,你需要设计一个用户界面,允许用户上传图片或接入视频流。当用户发起请求时,通过Ajax技术将数据发送到Flask后端,并接收处理结果。前端接收到的结果可以使用Vue的响应式特性,通过动态数据绑定实时更新到网页上。你可以使用图表库(如ECharts)来展示检测结果,例如在视频帧上绘制检测框和标签。 整个过程需要考虑前后端的数据交互和安全性,确保系统的稳定性和实时性。如果希望更深入地了解每个技术环节的具体实现方法,建议深入学习《基于YOLOv8Flask-Vue的目标检测毕设部署实现》这一资源。它不仅涵盖了技术整合的流程,还包括了实际应用案例和可能遇到的问题及解决方案,是学习和实践上述技术的宝贵资源。 参考资源链接:[基于YOLOv8Flask-Vue的目标检测毕设部署实现](https://wenku.csdn.net/doc/5uftgsb1pb)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值