Baumer工业相机堡盟工业相机如何联合OpenHarmony框架开发连接USB相机(OpenHarmony)

本文主要是介绍Baumer工业相机堡盟工业相机如何联合OpenHarmony框架开发连接USB相机(OpenHarmony),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Baumer工业相机堡盟工业相机如何联合OpenHarmony框架开发连接USB相机(OpenHarmony)

  • Baumer工业相机介绍
  • OpenHarmony介绍
  • 使用OpenHarmony开发连接Baumer工业USB相机
    • 1.配置权限
    • 2.初始化相机功能
    • 3.使用USB相机采集图像
    • 4.使用USB相机保存图像
    • 5.释放相机资源
  • Baumer工业相机联合OpenHarmony开发连接USB相机的优势
  • Baumer工业相机联合OpenHarmony开发连接USB相机的行业应用

Baumer工业相机介绍

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。

Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。

Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。

Baumer工业相机NEOAPI SDK是用于Baumer工业相机的一款最新的软件开发工具包(SDK)。它为开发人员提供了一系列API和工具,用于与Baumer工业相机进行通信和控制,控制方式极为便捷类似Halcon的相机助手类控制方式。​

本文只介绍使用OpenHarmony连接Baumer的USB相机,后续会相应测试网口Gige相机.

可以使用RK3568开发板和最新的DevEco Studio版本进行测试,具体如何搭建OpenHarmony开发环境并连接开发板进行调试,这里不再赘述,可以参考其它相关文档。

OpenHarmony介绍

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展

OpenHarmony 框架支持在设备上操作相机和使用相机功能,为用户提供拍照和录像等场景的支持。本篇文章将介绍相机的开发流程和API的用法,详细如何在自己的应用中使用相机。

OpenHarmony 框架相机功能需要调用相机管理接口、图片处理接口、媒体服务接口和媒体库管理接口等API和组件实现完整的相机操作和使用。

使用OpenHarmony开发连接Baumer工业USB相机

下面介绍在基于开发板使用OpenHarmony连接Baumer工业USB相机并进行采图保存的流程

1.根据camera的getCameraManager方法获取CameraManager

2.通过CameraManager获取所有的相机数组,找到可用的相机,并获取相机的cameraid

3.创建图片接收器并进行订阅,获取receiver的surfaceId

4.通过CameraManager的createCameraInput(cameraid)创建相机输入流

5.通过camera的createPreviewOutput(sufaceId)创建相机预览输出流.这里sufaceId为XComponent的id

6.通过camera的createPhotoOutput(sufaceId)创建相机拍照输出流.这里sufaceId为图片接收器的surfaceId

7.会话管理:创建会话,并且配置会话的相机输入流,相机拍照输出流与相机预览流,提交配置,开始会话

1.配置权限

在进行相机功能开发前需要先在配置文件中配置需要的权限信息。
Stage 模型配置 module.json5

代码如下(示例):

{"module":{..."requestPermissions": [{"name": "ohos.permission.CAMERA"},{"name": "ohos.permission.MICROPHONE"},{"name": "ohos.permission.MEDIA_LOCATION"},{"name": "ohos.permission.READ_MEDIA"},{"name": "ohos.permission.WRITE_MEDIA"}  ]} ...
}

FA 模型配置 config.json

{..."module":{..."reqPermissions": [{"name": "ohos.permission.CAMERA"},{"name": "ohos.permission.MICROPHONE"},{"name": "ohos.permission.MEDIA_LOCATION"},{"name": "ohos.permission.READ_MEDIA"},{"name": "ohos.permission.WRITE_MEDIA"}]}...
}

2.初始化相机功能

import camera from '@ohos.multimedia.camera'
import image from '@ohos.multimedia.image'
import fileio from '@ohos.fileio'
import mediaLibrary from '@ohos.multimedia.mediaLibrary
const Camerasize = {WIDTH: 640,HEIGHT: 4808}//获取相机管理器
import Camera from '@ohos.multimedia.camera'
CameraManager = await Camera.getCameraManager(context: Context): Promise<CameraManager>
//获取支持的所有相机设备列表
Cameras = await CameraManager.getCameras(): Promise<Array<Camera>>// 定义变量private mXComponentController = new XComponentController()private cameraManager: camera.CameraManager = undefinedprivate cameras: Array<camera.Camera> = undefinedprivate cameraId: string = undefinedprivate mReceiver: image.ImageReceiver = undefinedprivate cameraInput: camera.CameraInput = undefinedprivate previewOutput: camera.PreviewOutput = undefinedprivate mSurfaceId: string = undefinedprivate photoOutput: camera.PhotoOutput = undefinedprivate captureSession: camera.CaptureSession = undefinedprivate mediaUtil: MediaUtil = undefined@State desStr: string = ""private fileAsset: mediaLibrary.FileAssetprivate surfaceId: number@State photoUriMedia: string = ""private photoFlag: boolean = true@State  imgUrl: string = ""@State isMediaUrl:boolean=true  //判断保存路径为是沙箱路径或者媒体路径,默认媒体路径aboutToAppear(){this.mediaTest = mediaLibrary.getMediaLibrary(globalThis.context)}

3.使用USB相机采集图像

   //初始化相机和会话管理async initCamera(surfaceId: number) {this.cameraManager = await camera.getCameraManager(globalThis.context)//需要在Ability中定义globalThis.context=this.contextthis.cameras = await this.cameraManager.getCameras()this.cameraId = this.cameras[1].cameraIdawait this.photoReceiver() //创建图片接收器并进行订阅this.mSurfaceId = await this.mReceiver.getReceivingSurfaceId()this.cameraInput = await this.cameraManager.createCameraInput(this.cameraId)this.previewOutput = await camera.createPreviewOutput(surfaceId.toString())this.photoOutput = await camera.createPhotoOutput(this.mSurfaceId)this.captureSession = await camera.createCaptureSession(globalThis.context)await this.captureSession.beginConfig()await this.captureSession.addInput(this.cameraInput)await this.captureSession.addOutput(this.previewOutput)await this.captureSession.addOutput(this.photoOutput)await this.captureSession.commitConfig()await this.captureSession.start().then(() => {console.log('zmw1--Promise returned to indicate the session start success.');})}//创建图片接收器并进行订阅async photoReceiver() {this.mReceiver = image.createImageReceiver(CameraSize.WIDTH, CameraSize.HEIGHT, 4, 8)let buffer = new ArrayBuffer(4096)this.mReceiver.on('imageArrival', () => {console.log("zmw -service-imageArrival")this.mReceiver.readNextImage((err, image) => {if (err || image === undefined) {return}image.getComponent(4, (errMsg, img) => {if (errMsg || img === undefined) {return}if (img.byteBuffer) {buffer = img.byteBuffer}if(this.isMediaUrl){this.savePictureMedia(buffer, image)}else{this.savePictureSand(buffer, image)}})})return buffer})}

4.使用USB相机保存图像

  //拍摄照片async takePicture() {let photoSettings = {rotation: camera.ImageRotation.ROTATION_0,quality: camera.QualityLevel.QUALITY_LEVEL_LOW,mirror: false}await this.photoOutput.capture(photoSettings)}//保存沙箱路径async savePictureSand(buffer: ArrayBuffer, img: image.Image) {let info = this.mediaUtil.getInfoFromType(mediaLibrary.MediaType.IMAGE)let dateTimeUtil = new DateTimeUtil()let name = `${dateTimeUtil.getDate()}_${dateTimeUtil.getTime()}`let displayName = `${info.prefix}${name}${info.suffix}`let sandboxDirPath = globalThis.context.filesDir;let path = sandboxDirPath + '/' + displayNamethis.imgUrl=pathlet fdSand = await fileio.open(path, 0o2 | 0o100, 0o666);await fileio.write(fdSand, buffer)await fileio.close(fdSand).then(()=>{this.desStr=""});await img.release()}
//保存媒体路径async savePictureMedia(buffer: ArrayBuffer, img: image.Image) {this.fileAsset = await this.mediaUtil.createAndGetUri(mediaLibrary.MediaType.IMAGE)this.imgUrl = this.fileAsset.urilet fd = await this.mediaUtil.getFdPath(this.fileAsset)await fileio.write(fd, buffer)await this.fileAsset.close(fd).then(()=>{this.desStr=""})await img.release()}

5.释放相机资源

  //结束释放相机资源async releaseCamera() {if (this.captureSession) {await this.captureSession.stop().then(() => {})}if (this.cameraInput) {await this.cameraInput.release().then(() => {})}if (this.previewOutput) {await this.previewOutput.release().then(() => {})}if (this.photoOutput) {await this.photoOutput.release().then(() => {})}// 释放会话if (this.captureSession) {await this.captureSession.release((err) => {if (err) {console.error('zmw  Failed to release the CaptureSession instance ${err.message}');return;}});}}

Baumer工业相机联合OpenHarmony开发连接USB相机的优势

连接Baumer的工业USB相机并联合OpenHarmony开发具有许多优势,尤其是在工业应用中。下面详细介绍这些优势:

  1. 开放性和兼容性
  • 多设备支持: OpenHarmony框架提供了对多种设备的支持,包括USB相机,这意味着可以轻松地集成和连接各种品牌和型号的USB相机。
  • 行业标准兼容: OpenHarmony遵循行业标准,提高了USB相机与OpenHarmony框架的兼容性,确保设备的稳定和高效运行。
  1. 多样化的应用场景
  • 工业自动化: USB相机与OpenHarmony框架集成后,可用于工业自动化应用,包括视觉检测、质量控制和生产过程监控。
  • 智能监控: 结合OpenHarmony的USB相机可用于智能监控系统,比如安全监控、环境监测等。
  1. 软硬件协同优势
  • 设备管理: OpenHarmony提供了先进的设备管理功能,可管理USB相机的连接、数据传输和状态监控,实现了软硬件的无缝协同。
  • 驱动支持: OpenHarmony框架提供了对USB相机驱动的支持,简化了相机的使用和管理。
  1. 数据安全和隐私保护
  • 安全机制: OpenHarmony提供了完善的安全机制,可保护USB相机传输的数据,防止数据泄露和恶意攻击。
  • 隐私保护: 在处理USB相机收集的图像数据时,OpenHarmony框架提供了隐私保护功能,确保敏感信息的安全性。
  1. 系统稳定性和性能优化
  • 稳定性: OpenHarmony框架的稳定性和可靠性有助于确保USB相机系统的稳定运行,降低了系统崩溃和故障的风险。
  • 性能优化: OpenHarmony提供了性能优化的工具和机制,可优化USB相机的数据处理和传输效率,提高整体系统性能。

结论
通过联合OpenHarmony开发连接USB相机,可以在工业应用中获得多种优势,包括兼容性、多样化的应用场景、软硬件协同、数据安全和系统稳定性。这种集成提供了更强大、灵活和可靠的工业视觉解决方案,有助于提升生产效率和质量,并支持智能制造和工业自动化的发展。

Baumer工业相机联合OpenHarmony开发连接USB相机的行业应用

工业相机联合OpenHarmony开发连接USB相机的行业应用

连接USB相机并联合OpenHarmony开发在多个行业中具有广泛的应用,为各种应用场景提供了更灵活、可靠的视觉解决方案,包括但不限于以下几个行业:

  1. 制造业
  • 视觉检测与质量控制: 工业相机结合OpenHarmony和USB相机可用于产品表面缺陷检测、尺寸测量等质量控制领域,提高生产线的自动化程度和产品质量。
  • 生产过程监控: 实时监控生产线上的制造过程,识别异常,并对设备运行状态进行分析和优化。
  1. 智能制造
  • 设备联动与智能优化: 结合视觉识别功能,实现设备间的联动协作,并根据实时反馈进行智能优化,提高生产效率和响应速度。
  • 远程监控与维护: 通过USB相机及OpenHarmony连接,实现对智能制造设备进行远程监控和维护,降低故障维修成本,提高设备利用率。
  1. 智能安防
  • 视频监控系统: 将USB相机与OpenHarmony框架集成,实现高清晰度的视频实时监控,结合人脸识别、运动追踪等功能,提高智能安防系统的精准性和实时性。
  • 智能入侵检测: 利用USB相机采集的图像数据,通过OpenHarmony进行智能分析,实现对入侵行为的快速识别和报警。
  1. 医疗行业
  • 医学成像: USB相机通过OpenHarmony框架实现对医学成像设备的连接,提高医学图像采集和处理的效率,同时保障医学数据的安全性和隐私保护。
  • 远程医疗诊断: 结合USB相机和OpenHarmony的功能,实现对远程医疗诊断设备的图像传输和实时沟通,促进远程医疗服务的发展。
  1. 农业与环境监测
  • 智能农业: USB相机通过OpenHarmony框架实现智能农业领域应用,例如植物生长监测、病虫害识别和农作物采收等。

  • 环境监测: 利用USB相机对环境进行实时视频监控,适用于自然环境变化监测、野生动物追踪和环境污染检测等。

    **结论 **

工业相机联合OpenHarmony开发连接USB相机的行业应用极为广泛,覆盖制造业、智能制造、智能安防、医疗行业、农业与环境监测等多个领域,为各个行业提供了先进的视觉解决方案,推动了企业的自动化、智能化发展,提高了生产效率和产品质量,同时也提升了行业安全性和精准度。

这篇关于Baumer工业相机堡盟工业相机如何联合OpenHarmony框架开发连接USB相机(OpenHarmony)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/951009

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与