这里是前端的相关内容
<body> <div class="row" style="padding:3%;"> <div class="col-lg-6"> <h5>输入数据:</h5> <div> <video id="video" autoplay></video> </div> </div> <div class="col-lg-6"> <h5>输出结果:</h5> <div class="custom-file-container__image-preview"> <img id="res" src="#" > </div> </div> </div> <input type="button" onclick="start()" value="开始识别"> <input type="button" onclick="stop()" value="暂停识别"> <script> function start() { navigator.mediaDevices.getUserMedia({ video: true }) .then(function (stream) { var video = document.querySelector('video'); video.srcObject = stream; var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); setInterval(function () { var videoWidth = video.videoWidth; var videoHeight = video.videoHeight; canvas.width = videoWidth; canvas.height = videoHeight; ctx.drawImage(video, 0, 0, videoWidth, videoHeight); var imageData = canvas.toDataURL('image/png',1); // 压缩图片 // 发送数据到后端 $.ajax({ type: 'POST', url: '/image_data', data: { id :$("#uid").val(), image_data: imageData }, success: function (response) { console.log(response); } }); }, 1000 / 30); // 每秒30帧 }) $("#res").attr("src", "/img_feed?id="+$("#uid").val()) .catch(function (error) { console.error(error); }); }</script>
# 视频推流def gen(path): cap = cv2.VideoCapture(path) while cap.isOpened(): try: # 记录开始时间 start_time = time.time() # 获取画面 success, frame = cap.read() if success: im, label, c = d.detect(frame) ret, jpeg = cv2.imencode('.png', im) if ret: frame = jpeg.tobytes() # 计算处理时间 elapsed_time = time.time() - start_time print(f"Frame processing time: {elapsed_time:.3f} seconds") yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n') else: break else: break except Exception as e: print(e) continue cap.release() cv2.VideoCapture(path)# 视频流结果@app.route('/video_feed')def video_feed(): f = request.args.get("f") print(f'upload/{f}') return Response(gen(f'upload/{f}'), mimetype='multipart/x-mixed-replace; boundary=frame')这里是后端的内容# 前台推流@app.route('/image_data', methods=["POST"])def image_data(): image_data = request.form.get('image_data') id = request.form.get('id') image_data = io.BytesIO(base64.b64decode(image_data.split(',')[1])) img = Image.open(image_data) # 对图片进行处理,例如压缩、滤波等 output = io.BytesIO() img.save(output, format='PNG', quality=85) output.seek(0) # 将处理后的图片保存到服务器 img.save(f'upload/temp{id}.png') with open(f'upload/temp{id}.png', 'wb') as f: f.write(output.read()) return "ok"
因为不知道怎么写,所以没有尝试,我希望在打开摄像头的时候可以显示检测框,以便我能正确识别到图像的置信度
cv2.VideoCapture(path)
这里面的path要么是本地笔记本摄像头,填写数字0,要么是IP摄像头的rtsp地址, 要么是一个本地绝对路径文件<mp4, jpeg等等>。你这里通过接口传递过去的那是啥?gen(f'upload/{f}')
。
还有报错信息是什么?如果是本地文件路径的话,建议改成绝对路径,或者完整路径试试看。
还有你的 /video_feed
接口也没有调用啊。
从你提供的代码来看,你正在使用 Flask 框架和 YOLOv5 进行图像识别,并通过 HTML 和 JavaScript 实现了一个简单的视频流。然而,你遇到了一个问题,即打开摄像头时无法显示检测框。
这个问题可能由几个原因导致,以下是一些可能的解决方案:
gen
函数中打印 im
和 label
,看看是否包含检测到的对象及其边界框。/video_feed
路由,看看是否能够看到摄像头的视频流。canvas
的内容直接绘制到 video
上,而不是使用 AJAX 发送到后端。这样,你可以在前端直接显示检测结果。修改 AJAX 部分,使其直接在前端进行检测并显示结果:setInterval(function () { var videoWidth = video.videoWidth; var videoHeight = video.videoHeight; canvas.width = videoWidth; canvas.height = videoHeight; ctx.drawImage(video, 0, 0, videoWidth, videoHeight); var imageData = canvas.toDataURL('image/png',1); // 压缩图片 // 在前端进行检测 var img = new Image(); img.src = 'data:image/png;base64,' + imageData; document.body.appendChild(img);}, 1000 / 30); // 每秒30帧
请尝试上述解决方案,并确保代码的其余部分没有错误或遗漏。如果问题仍然存在,请提供更多关于错误消息或异常的信息,以便进一步帮助你解决问题。
"One does not live by bread alone,but by every word that comes from the mouth of God" --(MATTHEW4:4) python开发框架 不管是python,还是php,亦或别的做web项目的语言,乃至于做其它非web项目的开发,一般都要用到一个称之为什么什么框架的东西。 框架的基本概念 开发这对框架的认识,由于
本文向大家介绍解释测试驱动开发框架。,包括了解释测试驱动开发框架。的使用技巧和注意事项,需要的朋友参考一下 测试驱动开发框架是从开发人员的思想出发实施的方法。在这里,开发人员编写测试用例,涵盖应用程序的每个功能,以验证代码是否正确。 一旦这些测试用例失败,开发人员将重构代码以使这些测试用例通过。该过程一直持续到所有测试用例通过为止。这种类型的方法广泛用于敏捷方法中。在此框架中,在开发产品的实际功能
本文向大家介绍Python flask框架如何显示图像到web页面,包括了Python flask框架如何显示图像到web页面的使用技巧和注意事项,需要的朋友参考一下 代码如下 webfig1.py plot.html 先用py绘制了xy的图像,然后经过几个命令,让其转化为plot_url,在传给plot.html,就可以了 代码在github:https://github.com/qingnvs
本文向大家介绍Python的Flask开发框架简单上手笔记,包括了Python的Flask开发框架简单上手笔记的使用技巧和注意事项,需要的朋友参考一下 最简单的hello world 之后,访问http://localhost:5000 支持post/get提交 多个url指向 不管post/get使用统一的接收 处理json请求 request的header中 处理时: 获取post提交中的ch
本文向大家介绍利用python实现后端写网页(flask框架),包括了利用python实现后端写网页(flask框架)的使用技巧和注意事项,需要的朋友参考一下 如何用python做后端写网页-flask框架 什么是Flask安装flask模块Hello World更深一步:数据绑定后端传入数据从前端获取数据 数据库连接screen创建后台查看删除后台 结束 什么是Flask Flask是一个使用
本文向大家介绍Python flask框架端口失效解决方案,包括了Python flask框架端口失效解决方案的使用技巧和注意事项,需要的朋友参考一下 大家可能有这样的体验,好比在程序里面我明明写了app.run(port=8001),结果程序还是在5000端口输出,我们右键点击py程序,直接运行。 可以看到,端口为5000 这时候我们要做的是点击以下图标 进入页面,填入如下内容,点击ok,再点击