站内搜索
发作品签到
专业版

开源视觉-OpenVisualSense-Lite

工程标签

6.0k
0
0
29

简介

开源视觉-OpenVisualSense-Lite项目基于嵌入式单板机(orangepi)设计,Lite版本配置一个500像素USB摄像头、一个热成像传感器,通过视觉融合算法实现视觉感知。

简介:开源视觉-OpenVisualSense-Lite项目基于嵌入式单板机(orangepi)设计,Lite版本配置一个500像素USB摄像头、一个热成像传感器,通过视觉融合算法实现视觉感知。
星火计划2025

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2025-03-19 15:25:57更新时间:2025-05-20 11:06:14

描述

视频链接:

B站:开源视觉-OpenVisualSense-Lite项目

项目简介

开源视觉-OpenVisualSense-Lite项目基于嵌入式单板机(orangepi)设计,Lite版本配置一个500像素USB摄像头、一个热成像传感器,通过视觉融合算法实现视觉感知。

该项目为类似“开发板”的目的,受限于作者能力,Lite版本为初代,硬件选择性能相对较低的配置,先把路子走通,待能力达到一定水平以后再推出Class版本和Pro版本。

Lite版本集成一个光学摄像头,带自动对焦,但刷新率较低;两路MLX90640热成像传感器,支持不同视觉角度;内部各种接口互联互通,方便不通开发方式。

本项目代码将在   https://gitee.com/breakqi/OpenVisualSense-Lite   持续更新。也希望有兴趣的朋友基于该硬件开发更优秀的代码。

 

项目功能

系统结构框图

  • 1、图像采集;
    2、热成像仪;
    3、融合成像;
  • 4、保存图像;

项目参数

  • 主处理器采用全志H618;芯片集成了4核Arm® Cortex®-A53,Mali™-G31 GPU以及全志自研画质增强引擎,最大支持8K@24fps的H.265视频解码和4K@25fps的H.264视频编码,满足图像处理需求。
  • 4G RAM,满足图像处理对内存的需求;
  • 五英寸触摸屏,1024x600分辨率;
  • 300/500万像素摄像头,红外补光,LED补光;
  • MLX90640热成像传感器,MLX90640 是工业标准并经过完全校准的 32*24像素热红外阵列传感器,采用 4 脚 TO39 封装以及I2C 兼容的数字接口。 MLX90640 包含 768 个热红外像素点。;
  • STM32F401作为协处理器进行底层硬件驱动。

原理解析(硬件说明)

  1. 硬件连接
    摄像头:通过 USB 接口连接到ZERO2W。
    MLX90640:1)通过 I²C 接口连接到ZERO2W;2)通过协处理器处理数据后再将数据发送到ZERO2W。

  2. 软件环境配置:Ubuntu、Python3.12

  3. 摄像头图像采集(Python + OpenCV)

  4. MLX90640 温度数据获取

  5. 图像融合算法
    步骤 1:数据对齐与插值
    将 MLX90640 的 32x24 低分辨率温度矩阵插值到摄像头图像分辨率(如 640x480)。
    步骤 2:温度可视化与融合
    将温度数据转换为颜色映射(伪彩色)
    调整伪彩色图像尺寸与可见光图像一致
    融合图像(透明度叠加)
    融合比例

  6. 主程序流程
    关键优化点
    时间同步:通过多线程/异步方式同时读取摄像头和传感器数据,避免时序偏差。
    温度校准:对 MLX90640 进行环境温度补偿校准。
    性能优化:使用 C/C++ 实现插值算法(如 OpenCL)提升实时性。
    扩展功能
    温度标注:在图像中标记最高/最低温度点。
    视频流融合:修改代码为持续捕获模式,实现实时温度监控。

硬件说明

1--电源电路:
2S电池供电,提供两路5V3A电源输出,分别给屏幕和核心板供电。

2--USB扩展:
通过两片USB接口芯片,扩展出足够的USB接口进行使用。


软件代码

上位机部分代码展示

底板硬件驱动部分代码展示

 
import tkinter as tk
import cv2
import time
import numpy as np
import wiringpi
from wiringpi import GPIO
from PIL import Image, ImageTk

class ThermalImagingApp:
    flag_led = 0
    flag_red = 0

    def __init__(self, root):
        self.root = root
        self.root.title("OrangePi 热成像系统")
        self.root.geometry("1024x600")
        self.root.resizable(False, False)

        # 显示区域初始化
        self.left_frame = tk.Frame(root, bg="black")
        self.left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        self.display_label = tk.Label(self.left_frame)
        self.display_label.pack(fill=tk.BOTH, expand=True)

        # 右侧控制面板
        self.right_frame = tk.Frame(root, width=84, bg="#f0f0f0")
        self.right_frame.pack(side=tk.RIGHT, fill=tk.Y)
       
        # 功能按钮
        self.btn1 = self.create_button("摄像头模式", 0)
        self.btn2 = self.create_button("热成像模式", 1)
        self.btn3 = self.create_button("CS1", 2)
        self.btn4 = self.create_button("CS2", 3)
        self.btn5 = self.create_button("LED 补光", 4)
        self.btn6 = self.create_button("红外补光", 5)


        # 硬件初始化
        self.current_mode = 0  # 0:摄像头 1:热成像
        self.init_camera()
        self.init_thermal_sensor()
        self.init_io()

    def create_button(self, text, index):
        btn = tk.Button(
            self.right_frame,
            text=text,
            height=3, width=15,
            bg="#4a7a8c", fg="white",
            font=("Arial", 12),
            command=lambda: self.mode_switch(index)
        )
        btn.pack(pady=10, padx=5, fill=tk.X)
        return btn

    def init_io(self):
        wiringpi.wiringPiSetup()
        wiringpi.pinMode(19, GPIO.OUTPUT)
        wiringpi.pinMode(20, GPIO.OUTPUT)

    def init_camera(self):
        self.cap = cv2.VideoCapture(0)
        if not self.cap.isOpened():
            print("摄像头初始化失败")

    def init_thermal_sensor(self):
        temp = 1

   
       
    def mode_switch(self, index):
       
        if index == 4:
            self.led_switch()
        elif index == 5:
            self.red_switch()
                 
        elif index == 1:   # 切换到热成像模式
            temp =2
        elif index == 0:  # 切换回摄像头模式
            self.current_mode = 0            
            self.update_camera()

    def led_switch(self):
        global flag_led        
        if self.flag_led == 0:
            self.flag_led = 1
            wiringpi.digitalWrite(19, GPIO.HIGH)
        elif self.flag_led == 1:
            self.flag_led = 0
            wiringpi.digitalWrite(19, GPIO.LOW)

    def red_switch(self):
        global flag_red        
        if self.flag_red == 0:
            self.flag_red = 1
            wiringpi.digitalWrite(20, GPIO.HIGH)
        elif self.flag_red == 1:
            self.flag_red = 0
            wiringpi.digitalWrite(20, GPIO.LOW)

    def update_camera(self):
        if self.current_mode == 0:
            ret, frame = self.cap.read()
            if ret:
                img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                img = Image.fromarray(img).resize((800, 640),Image.LANCZOS)
                imgtk = ImageTk.PhotoImage(image=img)
                self.display_label.imgtk = imgtk
                self.display_label.configure(image=imgtk)
            self.root.after(30, self.update_camera)

    def update_thermal(self):
        temp = 3

    def __del__(self):
        if hasattr(self, 'cap'):
            self.cap.release()

if __name__ == "__main__":
    root = tk.Tk()
    app = ThermalImagingApp(root)
    root.mainloop()

实物图


电路板

纯图像模式

纯热成像模式(其实此处不纯,设置了10%的透明度)

视觉融合模式

远程模式(转为硬件调试监控而生)

保存截图

 

组装流程


系统测试中

系统组装


硬件通信正常


摄像头通信正常

正面试图

IO接口,提供一个TypeC,和两个USB2.0接口

后视图,提供两路热成像和一路光学摄像头,支持LED补光灯和红外补光灯。


三维组装图


内部结构图

维修模式带框架效果图

 

注意事项

充电电路有个小BUG,后期修改,先不要复刻。

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
OVSLite_Step文件.rar
73
2
cd2tk.py
54
3
000.jpg
46
4
FormatFactoryPart1.mp4
48
5
FormatFactoryPart2.mp4
40
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航