家庭燃气表微信抄表系统

1.设计目标

  • 需求:家里燃气度数的读数上报,每个月需在社区微信群里将手机拍摄的燃气表读数截图(加住址信息水印),发到群里给抄表员
  • 目标:手机上随时可以远程采集读数图片(自动加住址信息水印),在微信上发送给社区抄表员。

2.总体设计

在这里插入图片描述

在这里插入图片描述

3.燃气抄表采集端

使用树莓派(两点理由,第一支持Type-C供电且低功耗,可以加移动电源长期运行,第二支持GPIO,以后加传感器有扩展空间),部署Docker环境。
https://www.raspberrypi.com/software/
在这里插入图片描述
使用树莓派官网的系统安装工具完成系统安装,安装完成之后部属宝塔BT系统进行系统管理。
https://www.bt.cn/new/download.html
在这里插入图片描述

3.1 功能描述

接收管理服务器实时采集请求,实现燃气表拍照的采集上报,摄像头采集之前要自动打开小夜灯照明,厨柜内较黑拍不清楚。

3.2 容器配置

3.2.1 Dockerfile-GAS-ARM文件

FROM ubuntu:latest
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt install -y openssh-client openssh-server
RUN apt-get install -y wget curl git telnet vim make gcc 
RUN apt-get install -y python3 python3-pip libpcre3 libpcre3-dev
RUN apt-get install -y python3-opencv

RUN apt clean \
    && rm -rf /tmp/* /var/lib/apt/lists/* /var/tmp* \
RUN apt autoremove

WORKDIR /tmp
RUN apt-get update
RUN apt-get upgrade -y
RUN apt install -y libusb-1.0-0-dev
RUN git clone https://github.com/mvp/uhubctl
WORKDIR /tmp/uhubctl
RUN make && make install

# Install opencv-python
RUN pip3 install --upgrade pip -i https://pypi.mirrors.ustc.edu.cn/simple/
RUN pip3 install paho-mqtt pytest-shutil requests -i https://pypi.mirrors.ustc.edu.cn/simple/ 

WORKDIR /home
CMD ["/bin/bash"]

3.2.2 docker-compose.yaml文件

version: "3.3"
services:
  #燃气采集设备端
  #docker exec -it gas_meter_reading_t /bin/bash
  gas_meter_reading_t:
    build:
      context: ./
      dockerfile: Dockerfile-GAS-ARM
    image: gas_meter_reading:v1
    container_name: gas_meter_reading_t
    working_dir: /workspace
    devices:
      - /dev/video0:/dev/video0
    volumes:
      - ./workspace:/workspace
    restart: always
    tty: true
    privileged: true

3.3 采集代码

在这里插入图片描述

#!/usr/bin/python3
import base64
import asyncio
import paho.mqtt.client as mqtt
import cv2
import subprocess
import datetime
import threading
import time
import json
import shutil

class GMRDevice:
    def __init__(self, cam_simulate=False):
        self.mqtt_server_ip = '58.212.21.66'
        self.usbhub  = '1'
        self.hubport = '1'
        self.client = mqtt.Client()
        self.cam_simulate = cam_simulate

    def get_img_path(self):
        now = datetime.datetime.now()
        img_name = "{:04d}{:02d}{:02d}{:02d}{:02d}{:02d}".format(
            now.year, 
            now.month, 
            now.day, 
            now.hour, 
            now.minute, 
            now.second
            )
        print("当前时间:{}".format(img_name))
        return './images/' + img_name + '.jpg'

    #夜灯开关
    def set_led(self, cmd):
        try:
            output = subprocess.check_output(
            ["uhubctl", "-l", self.usbhub, "-p", self.hubport, "-a", cmd], 
            stderr=subprocess.STDOUT)
            print(output.decode("utf-8"))
        except subprocess.CalledProcessError as e:
            print("命令执行失败:", e.output.decode("utf-8"))

    #摄像头拍照
    def gas_meter_photography(self, imgPath):
        if self.cam_simulate == True:
            print('gas_meter_photography simulate(true)')
            shutil.copyfile('./''simulate''.jpg', imgPath)
            return True

        print('gas_meter_photography simulate(false)')
        self.set_led('on')
        time.sleep(1)
        isOK = False
        cap = cv2.VideoCapture(0)
        if cap.isOpened():
            print('宽:', cap.get(cv2.CAP_PROP_FRAME_WIDTH) )
            print('高:', cap.get(cv2.CAP_PROP_FRAME_HEIGHT) )
            print('帧率:', cap.get(cv2.CAP_PROP_FPS) )
            print('亮度:', cap.get(cv2.CAP_PROP_BRIGHTNESS) )
            print('对比度:', cap.get(cv2.CAP_PROP_CONTRAST) )
            print('饱和度:', cap.get(cv2.CAP_PROP_SATURATION) )
            print('色调:', cap.get(cv2.CAP_PROP_HUE) )
            print('曝光度:', cap.get(cv2.CAP_PROP_EXPOSURE) )
            #cap.set(cv2.CAP_PROP_CONTRAST, 100)
            #cap.set(cv2.CAP_PROP_EXPOSURE, 200)
            #cap.set(cv2.CAP_PROP_BRIGHTNESS, 100)
            
            __, frame = cap.read()
            farm = cv2.resize(frame, dsize = (1600, 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值