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

相关文章

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块