【Phase One SDK】飞思相机SDK的环境配置及调用

news/2024/10/22 14:24:38/

一、环境说明

操作系统:win 10

开发环境:visual studio 2019

参考资料-官方文档:Welcome to the Phase One Software Development Kits (SDKs) — Phase One SDK's 2.0.48 documentation

SDK 下载地址:Download — Phase One SDK's 2.0.48 documentation

二、下载Phase One SDK

        Phase One SDK 由 【camera SDK 】和【 image SDK 】组成,camera SDK 用于控制相机,常用于设置相机参数、接收图像等,image SDK 用于控制拍摄影像,处理元数据、裁剪、缩放等。进入下载地址(文章发表时)根据需求自行下载对应版本,本文仅面向windows系统版本。

         下载完成后解压缩,得到 【p1camerasdk-windows\dest】  【p1imagesdk-windows\dest】 两个目录文件夹,文件夹中有很多东西,但对我们有用的只有【 Cs 】文件夹,里面分别包含了两个动态链接库【 CameraSdkCs.dll 】、【 CameraSdkCBindingsForCs.dll 】、【 ImageSdkCs.dll 】、【 ImageSdkCBindingsForCs.dll 】,通过引用动态链接库即可使用 Phase SDK。

三、调用Phase One SDK

1、C# 控制台应用程序调用 Phase One SDK

        在官方参考资料中,提供了如何使用 PowerShell 或者 cmd 控制台 创建控制台应用程序的方法,在这里不再赘述,详见参考资料。我将介绍使用vs 2019创建并配置的方法。

(1)创建一个控制台应用程序(.NET Core)

        使用VS 2019正常创建一个控制台应用项目,如果过程和下图不一样,并且创建后的没有根据模板生成相应的应用程序,可能是vs 2019的版本过低,更新后即可解决

 (2)引用Phase One SDK

        将要待引用的两个SDK复制到项目中,保留【Cs】及其内部的动态链接库。

        双击项目名【PhaseTest_Core】,打开 .csproj 工程文件,在与 <PropertyGroup> 标签同级下使用<ItemGroup> 标签进行动态链接库的引用,工程文件的代码为:

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>netcoreapp3.1</TargetFramework></PropertyGroup><ItemGroup><!-- 引用 CameraSDK C# API --><Reference Include="CameraSdkCs.dll"><HintPath>dest1/Cs/CameraSdkCs.dll</HintPath></Reference><!-- 引用 ImageSDK C# API --><Reference Include="ImageSdkCs.dll"><HintPath>dest2/Cs/ImageSdkCs.dll</HintPath></Reference><!-- CameraSDK C# API 的依赖关系 --><None Include="dest1/Cs/CameraSdkCBindingsForCs.dll" Link="CameraSdkCBindingsForCs.dll"><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory></None><!-- ImageSDK C# API 的依赖关系 --><None Include="dest2/Cs/ImageSdkCBindingsForCs.dll" Link="ImageSdkCBindingsForCs.dll"><CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory></None></ItemGroup></Project>

        出现下图两个引用即表示完成。

(3)调用SDK完成工程需求

        测试一下,是否完成引用。打开【Program.cs】,加入 Using 指令进行调用,需要注意的是,不能直接 Using CameraSdkUsing ImageSdk ,正确调用代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using P1.CameraSdk;  // 引用相机SDK
using P1.ImageSdk; // 引用影像SDK

        在主函数中加入示例代码,测试获取连接的相机,主函数为:

        static void Main(string[] args){Console.WriteLine("Hello World!");Console.WriteLine("检测已连接的可使用的摄像机...");IEnumerable<CameraDescriptor> cameras = Camera.GetAvailableCameras();//获取所有相机foreach (var camera in cameras) //遍历相机{Console.WriteLine("* {0}", camera);//输出相机信息}if (cameras.Any() == false){Console.WriteLine("没有找到可用的摄像机!");}}

        示例完成了获取可使用的所有相机,运行调试:

         完成测试,读者可以开始完成自己的项目需求。

 2、C# 桌面应用程序调用 Phase One SDK

(1)创建一个桌面应用程序(.NET Framework)

 (2)引用及测试 Phase One SDK

        通常情况下,桌面应用程序的引用比较简单,右键【项目】→【添加引用】→【浏览】找到需要引用的.dll文件,即可完成对动态链接库的引用。但此时直接引用【CameraSdkCBindingsForCs.dll 】、【 ImageSdkCBindingsForCs.dll 】会出现下图所示报错:

         首先猜测是否桌面应用程序不需要这两个库。在窗体中设置一个按钮【获取相机】实现点击获取所有相机的小功能,并在文本框中输出提示:

         双击按钮跳转到点击函数,同上文加入 Using 指令进行调用,按钮点击响应函数中输入代码:

            textBox1.Text = "检测已连接的可使用的摄像机..." + '\n';IEnumerable<CameraDescriptor> cameras = Camera.GetAvailableCameras();//获取所有相机foreach (var camera in cameras) //遍历相机{textBox1.Text += camera.ToString() + "\n";}if (cameras.Any() == false){textBox1.Text += "没有找到可用的摄像机!" + "\n";}

        测试运行,结果发现报错如下图,意思是没有在Debug目录下找到对应的库,证明上文推测错误,那两个不能直接引用的库是必须的。

         那既然找不到,就直接复制进Debug目录吧,(感觉这也是一些库的用法)。测试运行,发现报错如下图,报错代码为:0x8007000B

         查了异常代码的含义,应该是解决方案的平台不对,一般VS默认平台是【Any CPU】,再回过头看SDK的开发文档,发现环境应该是Windows10,64位:

         按下图新建64位平台:

         再次运行调试,注意:需要将【CameraSdkCBindingsForCs.dll 】、【 ImageSdkCBindingsForCs.dll 】手动复制到项目【bin】→【x64】→【Debug】目录下

         至此,完成了桌面应用程序对Phase One SDK引用和调试,读者可以开始完成自己的项目需求。SDK包含的各种功能接口详见参考资料官方文档。


http://www.ppmy.cn/news/499612.html

相关文章

若依(ruoyi)前端Vue3 Element Plus Vite版样式修改

1. 导航栏样式 背景色 位置&#xff1a;src/layout/components/Navbar.vue 类名&#xff1a;.navbar // 比如背景色等 background: #1b2535;右侧图标&#xff08;全屏等&#xff09; .right-menu-item {display: inline-block;padding: 0 8px;height: 100%;font-size: 18p…

【深度学习】近万字解读深度学习领域有哪些瓶颈?

文章目录 一、导读二、深度学习缺乏理论支撑三、领域内越来越工程师化思维四、对抗样本是深度学习的问题&#xff0c;但不是深度学习的瓶颈五、知乎网友的回答5.1 作者&#xff1a;Giant5.2 作者&#xff1a;知乎用户5.3 作者&#xff1a;何之源 一、导读 虽然深度学习在图像、…

java的双层for循环的作用

Java的双层for循环可以用于在一个循环中嵌套执行另一个循环。常见的应用场景包括&#xff1a; 多维数组遍历&#xff1a;对于二维或更高维度的数组&#xff0c;需要使用嵌套的for循环来遍历每一个元素。 矩阵运算&#xff1a;矩阵乘法等运算通常需要使用两个嵌套的for循环&…

maven编译过滤(如excel)

现象 使用easyExcel 3.1.1操作excel 使用maven编译后&#xff0c;原先正常excel在读取的时候抛出了异常。 java.util.zip.ZipException: invalid stored block lengths一开始是怀疑excel里面内容格式不对&#xff0c;打开excel检查后发现格式都是正常的。 然后开始看源码 d…

前端JavaScript中的动态事件添加

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言事件的基本概念动态…

java编写金字塔

一、实心金字塔 首先&#xff0c;尝试写一个逐层加1个*的金字塔&#xff1a; 可以看出&#xff0c;每一层由空格和*组成&#xff0c;且空格*的总数为底部基石的数量&#xff0c;那么前后空格数就是&#xff08;底部基石数 - 各层星星数&#xff09;*1/2&#xff0c;然后拼接字…

乐创文娱:正与法院协商撤销“失信被执行人”事宜

【TechWeb】2月18日消息&#xff0c;针对乐视影业被列为“失信被执行人”一事&#xff0c;乐创文娱今日在官方微博回应称&#xff0c;此事主要因乐视影业对仲裁结果存在异议&#xff0c;沟通过程中存在信息不畅的情况&#xff0c;目前正与法院协商撤销事宜。 2月15日&#xff0…

设置表格table斑马格颜色

even odd偶数行和奇数行 分开设置 .tabledata tbody tr:nth-child(even) {background-color: #073767;}.tabledata tbody tr:nth-child(odd) {background-color: #062b57;}表头颜色 .tabledata thead th {background-color: #0B4876; } .tabledata自己表格类名