opencv-python 印刷质量缺陷的视觉检测

news/2024/11/25 7:38:14/

Windows10+Python+Yolov8+ONNX图片缺陷识别,并在原图中标记缺陷,有onnx模型则无需配置,无需训练。

** Python+Yolov8+ONNX实时缺陷目标检测原文
labelimg使用指南
windows使用YOLOv8训练自己的模型(0基础保姆级教学)

python-opencv五种自动白平衡算法,附源码直接可用(均值、完美反射、灰度世界、动态阈值、基于图像分析的偏色检测及颜色校正)

7系统中,您也可以通过控制面板来打开摄像头。打开开始菜单,点击控制面板,选择硬件和声音,然后点击设备和打印机。找到您的摄像头设备,右键点击选择启用。

Opencv+Python实现缺陷检测

https://blog.51cto.com/u_14224/7412621

###################################################################################

用YOLOv8一站式解决图像分类、检测、分割

opencv-python扁钢表面缺陷分类

深度学习实现缺陷检测算法汇总

使用YOLOv8进行工业视觉缺陷检测,基于Aidlux完成本地终端部署

表面缺陷检测数据集汇总及其相关项目推荐 | Github开源

aidlux项目主页

使用YOLOv8进行工业视觉缺陷检测,基于Aidlux完成本地终

aidlux项目文档

基于Aidlux+Yolo5-Lite,全流程实现桌面级监测系统

Aidlux s855边缘计算盒子
下面简要介绍下Aidlux:Aidlux是一套基于安卓平台边缘计算系统,类似于在安卓平台中嵌入ubuntu系统,可以在安卓手机中下载,也可以在Aidlux发布的边缘计算盒子中运行,我是在Aidlux s855边缘计算盒子中使用,用安卓手机也可以运行demo,只不过边缘计算盒子考虑工业性,散热、接口更丰富。

###########################################################################

使用Python3实现树莓派+摄像头循环监控录像

实现效果
使用opencv调用USB外置摄像头进行循环录像,视频分段录制后进行保存(代码中是每5分钟存一下),当tf卡的可用空间不足50%的时候删除已保存视频最早的文件,然后继续新的录制

依赖轮子
opencv-python 图像处理必备
logzero 日志记录神器
完整代码

#!/usr/bin/env python3
import glob
import os
from datetime import datetimeimport cv2
import logzero
from logzero import logger# 配置logzero保存日志到文件,单文件最大5MB,最多保存3份
logzero.logfile('/home/pi/video/log.log', maxBytes=5e6, backupCount=3)# 限制至少保留可用磁盘空间百分比
SPACE_LIMIT = 50
# 录制视频的分段时长(单位秒)
PER_LENGTH = 5 * 60
# 视频保存位置
LOCATION = '/home/pi/video/'def disk_per():"""计算当前/目录可用空间比率:return: 返回整数百分比结果"""info = os.statvfs('/')free_size = info.f_bsize * info.f_bavailtotal_size = info.f_blocks * info.f_bsizepercent = round(free_size / total_size * 100)return percentdef get_files_list(exp):"""获取指定位置下的指定后缀文件列表:param exp: 搜索路径表达式.格式: /home/pi/*.avi:return:"""files = list(filter(os.path.isfile, glob.glob(exp)))# 按照文件创建时间倒序排列files.sort(key=lambda x: os.path.getctime(x), reverse=True)return filesdef record():"""录制视频:return:"""WIDTH = 640HEIGHT = 480FPS = 24.0cap = cv2.VideoCapture(0)# 设置摄像头设备分辨率cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)# 设置摄像头设备帧率,如不指定,默认600cap.set(cv2.CAP_PROP_FPS, 24.0)# 建议使用XVID编码,图像质量和文件大小比较都兼顾的方案fourcc = cv2.VideoWriter_fourcc(*'XVID')start_time = datetime.now()filename = LOCATION + start_time.strftime('%Y-%m-%d_%H-%M-%S') + '.avi'out = cv2.VideoWriter(filename, fourcc, FPS, (WIDTH, HEIGHT))flag = Truewhile flag:# 检测磁盘空间是否充足if disk_per() > SPACE_LIMIT:# 开始当前录制视频时段if (datetime.now() - start_time).seconds >= PER_LENGTH:# 到达视频分段时长后停止录制logger.info(f'分段录制结束,文件保存为{filename}')out.release()# 重新开始新的视频录制start_time = datetime.now()filename = LOCATION + start_time.strftime('%Y-%m-%d_%H-%M-%S') + '.avi'out = cv2.VideoWriter(filename, fourcc, FPS, (WIDTH, HEIGHT))else:ret, frame = cap.read()if ret:out.write(frame)else:# 磁盘使用空间达到配额后删除最早的视频文件logger.warn(f'磁盘可用空间不足{SPACE_LIMIT}%,将删除最早保存的视频文件')files = get_files_list(LOCATION + '*.avi')os.remove(files[0])logger.info(f'{files[0]}已删除')cap.release()if __name__ == '__main__':logger.info('开始录制视频')record()
$ chmod +x cam.py
$ nohup ./cam.py &

http://www.ppmy.cn/news/1232166.html

相关文章

【C+进阶之路】第六篇:C++11

文章目录 一、【C】C11(1)二、【C】C11(2) 一、【C】C11(1) 【C】C11(1) 二、【C】C11(2) 【C】C11(2) 🌹&#x1f33…

11.21序列检测,状态机比较与代码,按键消抖原理

序列检测 用一个atemp存储之前的所有状态,即之前出现的七位 含无关项检测 要检测011XXX110 对于暂时变量的高位,位数越高就是越早出现的数字,因为新的数字存储在TEMP的最低位 不重叠序列检测 ,一组一组 011100 timescale 1ns…

vue中原生H5拖拽排序_拖拽图片也是同样的道理

原文地址【vue中原生H5拖拽排序_拖拽图片也是同样的道理】 H5有基于拖拽的事件机制&#xff0c;如果你还不熟悉&#xff0c;请看我之前的文章【拖拽上传】中有介绍。 原生拖拽API实现 由于比较简单直接上代码了&#xff1a; <!DOCTYPE html> <html lang"en&qu…

目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】目标视觉检测

目录 前言 算法原理 1 目标视觉检测的基本流程 1.1 区域建议 1.2 特征表示

【Docker】从零开始:4.为什么Docker会比VM虚拟机快

【Docker】从零开始&#xff1a;4.为什么Docker会比VM虚拟机快 docker有着比虚拟机更少的抽象层docker利用的是宿主机的内核,而不需要加载操作系统OS内核 docker有着比虚拟机更少的抽象层 由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接…

40.组合总和 II

原题链接&#xff1a;40.组合总和 II 思路&#xff1a; 太抽象了 建议看题解 代码随想录该题题解 全代码&#xff1a; class Solution { public:vector<vector<int>>result;vector<int> path;bool picking false;void backtracking(vector<int>&am…

引入库步骤

原生代码转插件&#xff0c;转为向上层uniapp,js调用的代码时遇到的问题&#xff1a; 某些类报红&#xff0c;是因为没有导入相应的包。 导包步骤&#xff1a; 将包放在模块的lib文件夹下&#xff08;没有lib文件夹就自己创建&#xff09;模块的builde.gradle添加代码&#x…