使用算法进行目标检测,本文是根据训练集进行推理,获取物体的尺寸
在yolov5的代码上,进行二次开发,获取物体在图片上的像素宽度与物体实际宽度做成比例,获取其他物体的实际尺寸,测试的时候用来几个摄像头,有畸形,误差也很小,主要取决于训练集是否够详细,测试用了400张图片进行测试,误差在厘米以内,要是用网络摄像头可以用代码将网络摄像头的视频流导出图片,进行标注,训练,这样分辨率才能识别
将摄像头视频流变成图片代码(获取萤石云上的设备)
import hashlib
import hmac
import base64
import random
import requests
import cv2
# 设置萤石云的相关参数
# 设置萤石云的相关参数
app_key = 'xxx'
app_secret = 'xxx'
CAMERA_SERIAL = 'E92940560'
CHANNEL_NO = '1'
EXPIRE_TIME = '300000' # 监控地址有效期,单位为秒
def _generate_sign(method, url, params, secret):
sorted_params = sorted(params.items(), key=lambda x: x[0])
raw_data = method.upper() + url + '?' + '&'.join([f"{k}={v}" for k, v in sorted_params])
sign = hmac.new(secret.encode('utf-8'), raw_data.encode('utf-8'), hashlib.sha1).digest()
sign = base64.b64encode(sign).decode('utf-8')
return sign
# 构造请求 URL,获取accessToken
url = 'https://open.ys7.com/api/lapp/token/get'
# 构造请求 URL,获取监控地址
adressurl = 'https://open.ys7.com/api/lapp/v2/live/address/get'
params = {
'appKey': app_key,
'appSecret': app_secret
}
def run():
body = requests.post(url, params=params)
if body:
result = body.json()
if result.get('code') == '200':
print("获取token")
data=result.get("data")
accessToken =data.get('accessToken')
adderssParams = {
"accessToken": accessToken,
"deviceSerial": CAMERA_SERIAL,
"protocol":2,
"expireTime":1000000,
"type":1,
"quality":1
}
addressBody = requests.post(adressurl, params=adderssParams)
if addressBody:
addressData = addressBody.json()
if addressData.get("code") == '200':
address = addressData.get("data").get("url")
print("地址==="+address)
# 查看视频
cap = cv2.VideoCapture(address)
while True:
ret, frame = cap.read()
if ret:
cv2.imshow('video', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 设置保存图片的路径和名称
num=random.randint(1, 100)
save_path = f'frame_{num}.jpg'
# 保存当前帧为图片
cv2.imwrite(save_path, frame)
cap.release()
cv2.destroyAllWindows()
else:
print("获取监控地址失败:" + addressData.get("msg"))
else:
print("获取token失败" + result)
if __name__ == '__main__':
run()
将文件打包成exe操作:
下载auto-py-to-exe,它是 pyinstaller
的 GUI
版本,在当前环境下载
pip install auto-py-to-exe
执行:在终端执行
auto-py-to-exe
引用的视频地址:图形化工具打包yolov5,生成可执行文件exe_哔哩哔哩_bilibili
引用:图像化工具打包yolov5,生成可执行文件exe - 迷途小书童的Note迷途小书童的Note (xugaoxiang.com)