更新记录
1.0.0(2023-05-25)
海康威视-机器视觉工业相机客户端MVS Android系统工业相机客户端MVS是为在Android平台调试工业相机开发的软件应用程序。适用于GigE和USB3.0接口工业面阵、线阵相机,支持实时预览、参数配置、抓图、升级相机固件等功能。
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
前言
海康威视-机器视觉工业相机客户端MVS Android系统工业相机客户端MVS是为在Android平台调试工业相机开发的软件应用程序。适用于GigE和USB3.0接口工业面阵、线阵相机,支持实时预览、参数配置、抓图、升级相机固件等功能。
支持定制,联系方式 QQ:252797991
功能
module API接口:
var MVCamCtrl = uni.requireNativePlugin("wrs-MVCamCtrl");
UI组件:
<wrs-MVCamCtrlImageView ref="MVCamCtrlImageView" :style="'width:'+width+'px;height:'+height+'px;'" @onLoadView="onLoadView()"></wrs-MVCamCtrlImageView>
具体流程为:
module API接口与UI组件的方法函数基本上一样,下面一module API接口为里说明: 枚举获取所有设备(MV_CC_EnumDevices) -> 创建句柄(MV_CC_CreateHandle) -> 打开设备(MV_CC_OpenDevice) -> 业务操作(设置相机参数、开启设备流、抓取图片、预览视频...) -> 关闭设备(MV_CC_CloseDevice) -> 销毁句柄(MV_CC_DestroyHandle)
方法
- 枚举获取所有设备
var params = {};
// 0: MV_UNKNOW_DEVICE
// 1: MV_GIGE_DEVICE
// 2: MV_1394_DEVICE
// 4: MV_USB_DEVICE
// 8: MV_CAMERALINK_DEVICE
params.deviceType = 4 | 1;
// 获取所有设备
MVCamCtrl.MV_CC_EnumDevices(params, (resp) => {
var code = resp.code;
if (code == 0) {
var devices = resp.devices;
var length = devices.length;
if (length > 0) {
for (var i = 0; i < length; i++) {
var device = devices[i];
var transportLayerType = device.transportLayerType;
var title = "";
if (transportLayerType == 1) { // MV_GIGE_DEVICE
title = device.gigEInfo.manufacturerName + "--" + device.gigEInfo
.serialNumber + "--" + device.gigEInfo.deviceVersion + "--" + device
.gigEInfo.userDefinedName;
} else {
title = device.usb3VInfo.manufacturerName + "--" + device.usb3VInfo
.serialNumber + "--" + device.usb3VInfo.deviceVersion + "--" + device
.usb3VInfo.userDefinedName;
}
}
} else {
this.showMsg("无法获取到设备:" + JSON.stringify(resp));
}
} else {
this.showMsg("无法获取到设备:" + JSON.stringify(resp));
}
});
- 创建句柄
MVCamCtrl.MV_CC_CreateHandle({
deviceIndex: this.deviceIndex // 设备数组的索引
}, (resp) => {
if (resp.code != 0) {
this.showMsg("创建设备句柄失败:" + JSON.stringify(resp));
}
});
- 打开设备
MVCamCtrl.MV_CC_OpenDevice((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("打开设备失败:" + JSON.stringify(resp));
}
});
- 关闭设备
MVCamCtrl.MV_CC_CloseDevice((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
}
});
- 销毁句柄
MVCamCtrl.MV_CC_DestroyHandle((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
}
});
Int、Float、Bool、Enum、String等设置方法key具体可以取哪些业务值可以使用MVS客服端查看
- 设置Int类型节点值
var params = {};
params.key = "Height"; // Width、Height
params.value = 1024;
MVCamCtrl.MV_CC_SetIntValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
}
});
- 获取Int类型节点值
var params = {};
params.key = "Height";
MVCamCtrl.MV_CC_GetIntValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
} else {
var curValue = resp.value.curValue;
var max = resp.value.max;
var min = resp.value.min;
var inc = resp.value.inc;
}
});
- 设置float类型节点值
var params = {};
params.key = "Gain"; // ExposureTime(曝光度)
params.value = 5;
MVCamCtrl.MV_CC_SetFloatValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
}
});
- 获取Float类型节点值
var params = {};
params.key = "Gain";
MVCamCtrl.MV_CC_GetFloatValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
} else {
var curValue = resp.value.curValue;
var max = resp.value.max;
var min = resp.value.min;
var inc = resp.value.inc;
}
});
- 设置enum类型节点值
var params = {};
params.key = "TriggerMode"; // PixelFormat(相机图像格式)
params.value = 0;
MVCamCtrl.MV_CC_SetEnumValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
}
});
- 获取enum类型节点值
var params = {};
params.key = "Gain";
MVCamCtrl.MV_CC_GetEnumValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
} else {
var curValue = resp.value.curValue;
var supportValue = resp.value.supportValue;
}
});
- 设置bool类型节点值
var params = {};
params.key = "ReverseX"; // ReverseX、ChunkModeActive(水印模式)
params.value = false;
MVCamCtrl.MV_CC_SetBoolValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
}
});
- 获取bool类型节点值
var params = {};
params.key = "ReverseX";
MVCamCtrl.MV_CC_GetBoolValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
}
});
- 设置string类型节点值
var params = {};
params.key = "DeviceUserID"; // DeviceUserID(用户名称)
params.value = "hktestDev";
MVCamCtrl.MV_CC_SetStringValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
}
});
- 获取string类型节点值
var params = {};
params.key = "ReverseX";
MVCamCtrl.MV_CC_GetStringValue((resp) => {
if (resp.code != 0 || resp.flag != 0) {
this.showMsg("操作失败:" + JSON.stringify(resp));
}
});
- 获得最佳包大小(仅对网口相机有效)
var params = {};
MVCamCtrl.MV_CC_GetOptimalPacketSize((resp) => {
if (resp.code == 0 ) {
var packetSize = resp.packetSize;
}
});
- 开始取流
MVCamCtrl.MV_CC_StartGrabbing((resp) => {
if (resp.code == 0 ) {
// 成功
}
});
- 停止取流
MVCamCtrl.MV_CC_StopGrabbing((resp) => {
if (resp.code == 0 ) {
// 成功
}
});
- 初始化抓取图片的缓存大小,调用抓取图片接口(saveBitmapTimeout)之前必须设置,具体参考demo
MVCamCtrl.initMV_CC_GetBitmapTimeoutDatas({
value: 1024
});
- 抓取当前流保存为图片文件
var absPath = plus.io.convertLocalFileSystemURL("_downloads");
// Android获取的absPath以/结尾,iOS获取的absPath不是/结尾
if (absPath.endWith('/')) {
absPath = absPath.substring(0, absPath.length - 1);
}
var filePath = absPath + "/" + new Date().getTime() + ".jpg";
var params = {};
params.filePath = filePath;
params.inSampleSize = 2;
MVCamCtrl.saveBitmapTimeout(params, (resp) => {
var code = resp.code;
if (code == 0) {
this.src = filePath;
} else {
this.showMsg("保存图片失败:" + JSON.stringify(resp));
}
});
- 实时显示摄像头流视频,插件内部采用while(true){}死循环方式抓取流图片显示到UI上,该接口只适合
UI组件调用
var params = {};
params.timeout = 2000;
params.inSampleSize = 2;
this.$refs.MVCamCtrlImageView.MV_CC_GetBitmapTimeoutWhileStart(params, (resp)=>{
var code = resp.code;
if(code == 0) { // 成功
} else {
}
});
- 停止显示摄像头流视频
this.$refs.MVCamCtrlImageView.MV_CC_GetBitmapTimeoutWhileStop();
- 设置图片内容的拉伸方式,该接口只适合
UI组件调用
var params = {};
params.scaleType = "CENTER"; // CENTER、CENTER_CROP、FIT_END、CENTER_INSIDE、FIT_CENTER、FIT_START、FIT_XY、MATRIX
this.$refs.MVCamCtrlImageView.setScaleType(params);