[python] 树莓派GUI-摄像头-制作简单相机-PySide2/PyQT/QML/Python/Qt

[复制链接]
19732|3
 楼主| MakerInChina 发表于 2021-9-26 15:05 | 显示全部楼层 |阅读模式
本帖最后由 MakerInChina 于 2021-9-26 15:13 编辑

#有奖活动# #技术资源# #申请原创#


介绍在树莓派上使用python和qt开发一个camera程序,开发工具使用PyCharm和QtCreator,开发方式为Pyside2+QML。

1、新建项目1.1、新建工程
打开PyCharm,新建工程cameraViewer,如下:
1.2、添加python主程序
在项目中新建main.py 主程序如下:
  1. import os
  2. import sys
  3. from pathlib import Path

  4. from PySide2.QtCore import Qt, QObject, Slot, QCoreApplication
  5. from PySide2.QtQml import QQmlApplicationEngine
  6. from PySide2.QtWidgets import QApplication


  7. class Controler(QObject):

  8.     def __init__(self):
  9.         super().__init__()

  10.     @Slot()
  11.     def exit(self):
  12.         sys.exit()


  13. if __name__=='__main__':


  14.     a = QApplication(sys.argv)
  15.     a.setOverrideCursor(Qt.BlankCursor)

  16.     engine = QQmlApplicationEngine()

  17.     controler = Controler()
  18.     context = engine.rootContext()
  19.     context.setContextProperty("_Controler",controler)

  20.     engine.load(os.fspath(Path(__file__).resolve().parent / "ui/camera.qml"))

  21.     if not engine.rootObjects():
  22.         sys.exit(-1)

  23.     sys.exit(a.exec_())

主程序中,只用于显示qml界面,并添加了一个退出程序的函数供界面调用。
1.3、添加界面文件
  • 在项目中添加ui文件夹,并在ui文件夹下新建camera.qml文件,界面如下:
  • 主要参考代码如下:


  1. Camera{
  2.     id:camera
  3.     viewfinder
  4.     {
  5.         resolution: Qt.size(800, 480)
  6.         maximumFrameRate: 30
  7.     }
  8.     imageProcessing{
  9.         brightness: cameraitem.brightless
  10.         whiteBalanceMode: CameraImageProcessing.WhiteBalanceFlash
  11.     }
  12.     exposure {
  13.         exposureCompensation: -1.0
  14.         exposureMode: Camera.ExposurePortrait
  15.     }
  16.     flash.mode: Camera.FlashRedEyeReduction

  17.     imageCapture{
  18.         id:cameraCaptureImage
  19.         onImageCaptured: {
  20.             photopreview.source = preview
  21.             console.log("captured image:",preview)
  22.         }
  23.     }

  24.     digitalZoom: sliderZoom.value
  25. }

  26. VideoOutput{
  27.     id:viewer
  28.     anchors.fill: parent
  29.     source: camera
  30.     autoOrientation: true
  31.     focus: visible
  32.     fillMode: VideoOutput.PreserveAspectCrop
  33. }


主要使用了Camera和VideoOutput组件来进行摄像头操作,其他部分只是按键等操作控件使用。
  • 使用camera组件的imageCapture来抓取当前的图像,默认图片保存在 树莓派路径:/home/pi/Pictures/ 下。
2、执行程序2.1、上传程序到树莓派
在工程上右键将这个项目文件上传到树莓派中:
2.2、执行程序
上传后,在树莓派对应文件夹中,执行如下命令执行程序:
python3 main.py
如果出现类似:no service found for – “org.qt-project.qt.camera” 这样的错误,需要安装对应的库:qml-module-qtmultimedia python3-pyside2.qtmultimedia libqt5multimedia5-plugins
执行后可以看到显示如下:
可以通过 Brightless来调节亮度,通过Zoom来调节焦距,点击下面的红色按钮进行照相,然后左边按钮为查看当前照相的图片,右边为查看所有的图片文件。
完整代码:https://github.com/makerinchina-iot/raspberry_pyside_notes
视频演示:https://www.bilibili.com/video/BV1f3411276o
gaochy1126 发表于 2021-10-23 19:57 | 显示全部楼层
这个可以做图像识别吗?            
gaochy1126 发表于 2021-11-28 19:44 | 显示全部楼层
这个必须安装tft的屏幕吗?刷新的速度怎么样呢     
闻则123 发表于 2023-12-13 15:44 | 显示全部楼层
看看,学习下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

7

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部