更新记录

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:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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);

如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<!-- 允许应用程序改变网络状态 --> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 允许应用程序改变WIFI连接状态 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 允许应用程序访问有关的网络信息 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许应用程序访问WIFI网卡的网络信息 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许应用程序完全使用网络 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 允许应用程序访问外部存储器SD卡 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件使用的 海康威视 SDK会采集数据,详情可参考:https://www.hikrobotics.com/cn

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问