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


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

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

    Opencv+Python实现缺陷检测

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

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

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

    opencv-python扁钢表面缺陷分类

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

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

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

    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 datetime
    
    import 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_bavail
        total_size = info.f_blocks * info.f_bsize
        percent = round(free_size / total_size * 100)
        return percent
    
    
    def 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 files
    
    
    def record():
        """
        录制视频
        :return:
        """
    
        WIDTH = 640
        HEIGHT = 480
        FPS = 24.0
    
        cap = cv2.VideoCapture(0)
        # 设置摄像头设备分辨率
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
        # 设置摄像头设备帧率,如不指定,默认600
        cap.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 = True
        while 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    $ chmod +x cam.py
    $ nohup ./cam.py &
    
    • 1
    • 2
  • 相关阅读:
    面向AI时代的软件开发新范式
    最新uniapp开发微信小程序商城搭建教程(附源码)
    漏洞扫描工具大全,妈妈再也不用担心我挖不到漏洞了
    mybatis-plus 常用API 详解
    DDD/ABP/EF Core :新特性Owned Entity Types ,尝试另外一种值对象的配置方式
    MySQL高可用
    GO框架基础 (三)、xorm库
    python常见的运算符及用法
    框架的概念
    01-MQ介绍以及产品比较
  • 原文地址:https://blog.csdn.net/kunwen123/article/details/134487329