From a8ff93a0cf274795f0e9c3d66093f1c4c6ccf972 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@iotlink.com>
Date: 星期二, 19 十一月 2019 15:57:02 +0800
Subject: [PATCH] feat: add cloud plate sdk
---
csrc/buz/plate/cloud/detector.h | 17 +
csrc/buz/plate/eparking/detector.h | 5
sdk/plate/eparking/include/TH_ErrorDef.h | 0
csdk.h | 7
sdk/plate/cloud/lib/libLPRecognition.so | 0
sdk/plate/cloud/include/LPRecognition.h | 167 ++++++++++++++++++
c2go.go | 14 +
sdk/plate/cloud/lib/libgfortran.so.3 | 0
sdk/plate/cloud/lib/plate_det.model | 0
go2c.go | 48 +++++
csrc/buz/plate/cloud/detector.cpp | 89 +++++++++
csrc/all.hpp | 4
csrc/buz/plate/eparking/detector.cpp | 8
csdk.cpp | 18 +
sdk/plate/eparking/lib/libthplateid.so | 0
gosdk.go | 73 ++++++-
sdk/plate/eparking/lib/libLicenceManager.so | 0
sdk/plate/cloud/lib/libLPRecognition.a | 0
sdk/plate/cloud/lib/libopenblas.so.0 | 0
sdk/plate/eparking/include/TH_PlateID.h | 0
csdk_struct.h | 51 +++++
21 files changed, 476 insertions(+), 25 deletions(-)
diff --git a/c2go.go b/c2go.go
index 0f25bea..0c346cc 100644
--- a/c2go.go
+++ b/c2go.go
@@ -76,3 +76,17 @@
}
return
}
+
+// CPlateIDCloudPosArrayToGoArray convert CPlateIDCloudResult array to go
+func CPlateIDCloudPosArrayToGoArray(cArray unsafe.Pointer, count int) (goArray []CPlateIDCloudResult) {
+ p := uintptr(cArray)
+
+ for i := 0; i < count; i++ {
+ j := *(*CPlateIDCloudResult)(unsafe.Pointer(p))
+
+ goArray = append(goArray, j)
+
+ p += unsafe.Sizeof(j)
+ }
+ return
+}
diff --git a/csdk.cpp b/csdk.cpp
index 052fd84..02b15d6 100644
--- a/csdk.cpp
+++ b/csdk.cpp
@@ -107,11 +107,25 @@
return init_plate_id_detector(config, soPath);
}
-cPlateIDResult* c_api_plate_id_detect(int *plateIDCount, uchar *data, const int w, const int h) {
+cPlateIDResult* c_api_plate_id_detect(int *plateIDCount, uchar *data, const int w, const int h, const cRECT *rcDetect) {
const cIMAGE img{data, w, h, 3};
- return plate_id_detect(plateIDCount, &img);
+ return plate_id_detect(plateIDCount, &img, rcDetect);
}
int c_api_plate_id_free() {
return uninit_plate_id_detector();
+}
+
+// plateid cloud sdk api
+int c_api_plate_id_cloud_init(const cPlateIDCloudSDKCfg *config, char *soPath, char *modelPath) {
+ return init_plate_id_cloud_sdk_detector(config, soPath, modelPath);
+}
+
+cPlateIDCloudSDKResult* c_api_plate_id_cloud_detect(int *plateIDCount, uchar *data, const int w, const int h, const cRECT *rcDetect) {
+ const cIMAGE img{data, w, h, 3};
+ return plate_id_cloud_sdk_detect(plateIDCount, &img, rcDetect);
+}
+
+void c_api_plate_id_cloud_free() {
+ uninit_plate_id_cloud_sdk_detector();
}
\ No newline at end of file
diff --git a/csdk.h b/csdk.h
index e4f9961..666994b 100644
--- a/csdk.h
+++ b/csdk.h
@@ -42,9 +42,14 @@
// plateid api
int c_api_plate_id_init(const cPlateIDCfg *config, char *soPath);
-cPlateIDResult* c_api_plate_id_detect(int *plateIDCount, uchar*data, const int w, const int h);
+cPlateIDResult* c_api_plate_id_detect(int *plateIDCount, uchar*data, const int w, const int h, const cRECT *rcDetect);
int c_api_plate_id_free();
+// plateid cloud sdk
+int c_api_plate_id_cloud_init(const cPlateIDCloudSDKCfg *config, char *soPath, char *modelPath);
+cPlateIDCloudSDKResult* c_api_plate_id_cloud_detect(int *plateIDCount, uchar *data, const int w, const int h, const cRECT *rcDetect);
+void c_api_plate_id_cloud_free();
+
#ifdef __cplusplus
}
#endif
diff --git a/csdk_struct.h b/csdk_struct.h
index a6b2374..e5a1465 100644
--- a/csdk_struct.h
+++ b/csdk_struct.h
@@ -105,8 +105,7 @@
unsigned char bOnlyLocation; // 鍙畾浣嶈溅鐗屽紑鍚�
}cPlateIDCfg;
-typedef struct _cPlateIDResult
-{
+typedef struct _cPlateIDResult {
char license[16]; // 杞︾墝瀛楃涓�
char color[8]; // 杞︾墝棰滆壊
@@ -132,4 +131,52 @@
unsigned short nCarModelConfidence; // 杞﹀瀷鍙俊搴�
}cPlateIDResult;
+typedef struct _cPlateIDCloudSDKCfg {
+ int iImageMode; //0锛氫负甯фā寮� 1锛氫负鍦烘ā寮�
+ int iRecMode; //璇嗗埆妯″紡锛�0锛氬崟寮犲浘鐗囪瘑鍒紝1:瑙嗛妫�娴�+璇嗗埆锛�2锛氳棰戝甯ц瀺鍚堣瘑鍒�(娉細1妯″紡姣�2妯″紡蹇紝浣嗚瘑鍒巼鍜屾崟鑾风巼姣�2浣�)
+
+ int iMinPlateWidth; //璇嗗埆鏈�灏忚溅鐗屽搴�
+ int iMaxPlateWidth; //璇嗗埆鏈�澶ц溅鐗屽搴�
+
+ int iImageWidth; //鍥剧墖瀹藉害
+ int iImageHeight; //鍥剧墖楂樺害
+
+ int iMinHorAngle;
+ int iMaxHorAngle; //姘村钩鐭瑙掑害鑼冨洿锛屾敮鎸佹渶澶ц搴︿负[-30掳锛�30掳]
+ int iMinVerAngle;
+ int iMaxVerAngle; //鍨傜洿鐭瑙掑害鑼冨洿锛屾敮鎸佹渶澶ц搴︿负[-30掳锛�30掳]
+
+ //姝や簺椤归拡瀵硅溅鍨嬭瘑鍒湁鐢紝鍏朵綑鏃犵敤
+ float fExpLeftRightR; //杞﹁劯宸﹀彸鎵╁厖(杞︾墝鐨勫搴�)鍊嶆暟 鍙傝�冨�间负1.6
+ float fExpTopR; //杞﹁劯涓婇儴鎵╁厖(杞︾墝鐨勯珮搴�)鍊嶆暟 鍙傝�冨�间负6.0
+ float fExpBottomR; //杞﹁劯涓嬮儴鎵╁厖(杞︾墝鐨勯珮搴�)鍊嶆暟 鍙傝�冨�间负1.5
+}cPlateIDCloudSDKCfg;
+
+typedef struct _cPlateIDCloudSDKResult {
+ char number[20]; //璇嗗埆缁撴灉
+ cRECT PlateRect; //杞︾墝浣嶇疆
+ int x[4];
+ int y[4];
+ int iConfidence; //杞︾墝缃俊搴�
+ int ePlateType; //杞︾墝绫诲瀷
+ int iMoveDir; //杞﹁締杩愬姩鏂瑰悜 0锛氭湞杩戣繍鍔紝1锛氭湞杩滆繍鍔紝-1锛氭湭鐭�
+ int eVColor1; //杞﹁韩涓婚鑹�
+ int eVColor2; //杞﹁韩娆¢鑹�
+ int eVehicleBright; //杞﹁締娣辨祬鑹�
+ unsigned char *pResultBits; //瑙嗛璇嗗埆妯″紡涓姄鎷嶇殑鍥剧墖,瑙嗛妯″紡璇嗗埆涓嬫湁鏁堬紝闇�瑕佸紑杈�
+
+ int iFramNo; //瑙嗛妯″紡涓嬪抚鍙�
+ int sTime[7]; //瑙嗛璇嗗埆妯″紡涓姄鎷嶆寮犲浘鐨勬椂闂�
+
+ //閽堝杞﹁劯璇嗗埆搴旂敤姝ら」锛屽叾浣欐棤鐢�
+ unsigned char *pVehicleFaceImage; //瀵瑰簲鐨勮溅鑴哥殑鍥剧墖,闇�瑕佹彁鍓嶅紑杈熷唴瀛橈紝寮�杈熶釜鏈�澶у唴瀛樺氨鍙互锛屽楂樺彲浠ラ兘涓�1000
+ int iVehicleFaceWidth; //杞﹁劯瀹藉害
+ int iVehicleFaceHeight; //杞﹁劯楂樺害
+ int iGrayFaceFlag; //杞﹁劯鏄惁涓虹伆搴﹀浘
+
+ cRECT charLocation[20]; //杞︾墝瀛楃鐨勪綅缃�(鍩轰簬澶у浘)
+ int charConfidence[20]; //瀛楃璇嗗埆缃俊搴�
+ int iCharNum; //杞︾墝瀛楃鏁扮洰
+}cPlateIDCloudSDKResult;
+
#endif
\ No newline at end of file
diff --git a/csrc/all.hpp b/csrc/all.hpp
index 96a7cbc..1414dd6 100644
--- a/csrc/all.hpp
+++ b/csrc/all.hpp
@@ -8,5 +8,7 @@
#include "buz/yolo/detector.cpp"
-#include "buz/plate/detector.cpp"
+#include "buz/plate/eparking/detector.cpp"
+#include "buz/plate/cloud/detector.cpp"
+
#endif
\ No newline at end of file
diff --git a/csrc/buz/plate/cloud/detector.cpp b/csrc/buz/plate/cloud/detector.cpp
new file mode 100644
index 0000000..2bf5134
--- /dev/null
+++ b/csrc/buz/plate/cloud/detector.cpp
@@ -0,0 +1,89 @@
+#include "detector.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "LPRecognition.h"
+
+#include "csdk_struct.h"
+
+namespace csdk_wrap
+{
+ static void* pInstance;
+ static LPR_RecParma RecParam;
+
+ void init_plate_id_cloud_sdk_config(const cPlateIDCloudSDKCfg *params);
+
+ int init_plate_id_cloud_sdk_detector(const cPlateIDCloudSDKCfg *params, char *keyPath, char *modelPath) {
+ // 璇诲彇鎺堟潈
+ int iInitFlag = LPR_ThreadInit(keyPath);
+ if(iInitFlag != LPR_OK)
+ {
+ return iInitFlag;
+ }
+
+ // 鍒濆鍖栭厤缃弬鏁�
+ init_plate_id_cloud_sdk_config(params);
+
+ // 璁剧疆Licence Manager杩愯璺緞
+ pInstance = LPR_Cloud_Init(RecParam, modelPath);
+
+ return pInstance == NULL ? 1 : 0;
+ }
+
+ void init_plate_id_cloud_sdk_config(const cPlateIDCloudSDKCfg *params) {
+ RecParam.eImageType = E_LPR_BGR;
+ RecParam.iHorCorrect = 1;
+ RecParam.iVerCorrect = 1;
+
+ RecParam.iPlateBornThr = 0;
+ RecParam.iPlateNumThr = 0;
+ RecParam.iPlateDeadThr = 0;
+ RecParam.iResultNum = 4;
+
+ RecParam.iRecMode = params->iRecMode;
+ RecParam.iImageMode = params->iImageMode;
+
+ RecParam.iMinPlateWidth = params->iMinPlateWidth;
+ RecParam.iMaxPlateWidth = params->iMaxPlateWidth;
+
+ RecParam.iImageHeight = params->iImageHeight;
+ RecParam.iImageWidth = params->iImageWidth;
+
+ RecParam.iMinHorAngle = params->iMinHorAngle;
+ RecParam.iMaxHorAngle = params->iMaxHorAngle;
+ RecParam.iMinVerAngle = params->iMinVerAngle;
+ RecParam.iMaxVerAngle = params->iMaxVerAngle;
+
+ RecParam.fExpLeftRightR = params->fExpLeftRightR;
+ RecParam.fExpTopR = params->fExpTopR;
+ RecParam.fExpBottomR = params->fExpBottomR;
+ }
+
+ cPlateIDCloudSDKResult* plate_id_cloud_sdk_detect(int *plateIDCount, const cIMAGE *img, const cRECT *rect) {
+ if (!img) {
+ return NULL;
+ }
+
+ cPlateIDCloudSDKResult *ppos = NULL;
+
+ ::LPR_Result pLprResult[20];
+ memset(&pLprResult, 0, sizeof(pLprResult));
+
+ // 璁剧疆璇嗗埆鍖哄煙
+ ::LPR_Rect rcDetect = {rect->left, rect->top, rect->right, rect->bottom};
+
+ int iVehicleNum = LPR_Cloud_RecImage((BYTE*)(img->data), img->width, img->height, pLprResult, &rcDetect, pInstance);
+
+ if (iVehicleNum > 0){
+ ppos = (cPlateIDCloudSDKResult*)malloc(iVehicleNum * sizeof(cPlateIDCloudSDKResult));
+ *plateIDCount = iVehicleNum;
+ memcpy(ppos, pLprResult, sizeof(LPR_Result) * iVehicleNum);
+ }
+ return ppos;
+ }
+
+ void uninit_plate_id_cloud_sdk_detector() {
+ LPR_Cloud_Uninit(pInstance);
+ }
+
+} // csdk_wrap
diff --git a/csrc/buz/plate/cloud/detector.h b/csrc/buz/plate/cloud/detector.h
new file mode 100644
index 0000000..a101ce2
--- /dev/null
+++ b/csrc/buz/plate/cloud/detector.h
@@ -0,0 +1,17 @@
+#ifndef _c_wrapper_plate_detector_hpp_
+#define _c_wrapper_plate_detector_hpp_
+
+#include "../../base.hpp"
+
+struct _cPlateIDCloudSDKCfg;
+struct _cPlateIDCloudSDKResult;
+struct _cIMAGE;
+struct _cRECT;
+
+namespace csdk_wrap{
+ int init_plate_id_cloud_sdk_detector(const cPlateIDCloudSDKCfg *params, char *keyPath, char *modelPath);
+ cPlateIDCloudSDKResult* plate_id_cloud_sdk_detect(int *plateIDCount, const cIMAGE *img, const cRECT *rect);
+ void uninit_plate_id_cloud_sdk_detector();
+}
+
+#endif
\ No newline at end of file
diff --git a/csrc/buz/plate/detector.cpp b/csrc/buz/plate/eparking/detector.cpp
similarity index 96%
rename from csrc/buz/plate/detector.cpp
rename to csrc/buz/plate/eparking/detector.cpp
index 710dff9..2ffbaaa 100644
--- a/csrc/buz/plate/detector.cpp
+++ b/csrc/buz/plate/eparking/detector.cpp
@@ -120,7 +120,7 @@
}
}
- cPlateIDResult* plate_id_detect(int *plateIDCount, const cIMAGE *img) {
+ cPlateIDResult* plate_id_detect(int *plateIDCount, const cIMAGE *img, const cRECT *rect) {
if (!img) {
return NULL;
}
@@ -132,11 +132,7 @@
memset(&result[0], 0, sizeof(result));
// 璁剧疆璇嗗埆鍖哄煙
- ::TH_RECT rcDetect;
- rcDetect.top = 0;
- rcDetect.right = img->width;
- rcDetect.bottom = img->height;
- rcDetect.left = 0;
+ ::TH_RECT rcDetect = {rect->left, rect->top, rect->right, rect->bottom};
int ret = TH_RecogImage((BYTE*)(img->data), img->width, img->height, result, &nResultNum, &rcDetect, &config);
// printf("TH_RecogImage ret = %d\n", ret);
diff --git a/csrc/buz/plate/detector.h b/csrc/buz/plate/eparking/detector.h
similarity index 82%
rename from csrc/buz/plate/detector.h
rename to csrc/buz/plate/eparking/detector.h
index 2889503..67937a7 100644
--- a/csrc/buz/plate/detector.h
+++ b/csrc/buz/plate/eparking/detector.h
@@ -1,15 +1,16 @@
#ifndef _c_wrapper_plate_detector_hpp_
#define _c_wrapper_plate_detector_hpp_
-#include "../base.hpp"
+#include "../../base.hpp"
struct _cPlateIDCfg;
struct _cPlateIDResult;
struct _cIMAGE;
+struct _cRECT;
namespace csdk_wrap{
int init_plate_id_detector(const cPlateIDCfg *params, char *soPath);
- cPlateIDResult* plate_id_detect(int *plateIDCount, const cIMAGE *img);
+ cPlateIDResult* plate_id_detect(int *plateIDCount, const cIMAGE *img, const cRECT *rect);
int uninit_plate_id_detector();
}
diff --git a/go2c.go b/go2c.go
index 97909d6..898623d 100644
--- a/go2c.go
+++ b/go2c.go
@@ -126,3 +126,51 @@
NCarModel [2]uint8 // 杞﹁締绫诲瀷
NCarModelConfidence [2]uint8 // 杞﹀瀷鍙俊搴�
}
+
+type CPlateIDCloudCfg struct {
+ NImageMode int32 //0锛氫负甯фā寮� 1锛氫负鍦烘ā寮�
+ NRecMode int32 //璇嗗埆妯″紡锛�0锛氬崟寮犲浘鐗囪瘑鍒紝1:瑙嗛妫�娴�+璇嗗埆锛�2锛氳棰戝甯ц瀺鍚堣瘑鍒�(娉細1妯″紡姣�2妯″紡蹇紝浣嗚瘑鍒巼鍜屾崟鑾风巼姣�2浣�)
+
+ NMinPlateWidth int32 //璇嗗埆鏈�灏忚溅鐗屽搴�
+ NMaxPlateWidth int32 //璇嗗埆鏈�澶ц溅鐗屽搴�
+
+ NImageWidth int32 //鍥剧墖瀹藉害
+ NImageHeight int32 //鍥剧墖楂樺害
+
+ NMinHorAngle int32
+ NMaxHorAngle int32 //姘村钩鐭瑙掑害鑼冨洿锛屾敮鎸佹渶澶ц搴︿负[-30掳锛�30掳]
+ NMinVerAngle int32
+ NMaxVerAngle int32 //鍨傜洿鐭瑙掑害鑼冨洿锛屾敮鎸佹渶澶ц搴︿负[-30掳锛�30掳]
+
+ //姝や簺椤归拡瀵硅溅鍨嬭瘑鍒湁鐢紝鍏朵綑鏃犵敤
+ FExpLeftRightR float32 //杞﹁劯宸﹀彸鎵╁厖(杞︾墝鐨勫搴�)鍊嶆暟 鍙傝�冨�间负1.6
+ FExpTopR float32 //杞﹁劯涓婇儴鎵╁厖(杞︾墝鐨勯珮搴�)鍊嶆暟 鍙傝�冨�间负6.0
+ FExpBottomR float32 //杞﹁劯涓嬮儴鎵╁厖(杞︾墝鐨勯珮搴�)鍊嶆暟 鍙傝�冨�间负1.5
+}
+
+type CPlateIDCloudResult struct {
+ License [20]uint8 //璇嗗埆缁撴灉
+ RcLocation CRECT //杞︾墝浣嶇疆
+ X [4]int32
+ Y [4]int32
+ NConfidence int32 //杞︾墝缃俊搴�
+ NType int32 //杞︾墝绫诲瀷
+ NDirection int32 //杞﹁締杩愬姩鏂瑰悜 0锛氭湞杩戣繍鍔紝1锛氭湞杩滆繍鍔紝-1锛氭湭鐭�
+ NCarColor int32 //杞﹁韩涓婚鑹�
+ NCarColor1 int32 //杞﹁韩娆¢鑹�
+ NBright int32 //杞﹁締娣辨祬鑹�
+ PResultBits int32 //瑙嗛璇嗗埆妯″紡涓姄鎷嶇殑鍥剧墖,瑙嗛妯″紡璇嗗埆涓嬫湁鏁堬紝闇�瑕佸紑杈�
+
+ FramNo int32 //瑙嗛妯″紡涓嬪抚鍙�
+ Time [7]int32 //瑙嗛璇嗗埆妯″紡涓姄鎷嶆寮犲浘鐨勬椂闂�
+
+ //閽堝杞﹁劯璇嗗埆搴旂敤姝ら」锛屽叾浣欐棤鐢�
+ FaceImage int32 //瀵瑰簲鐨勮溅鑴哥殑鍥剧墖,闇�瑕佹彁鍓嶅紑杈熷唴瀛橈紝寮�杈熶釜鏈�澶у唴瀛樺氨鍙互锛屽楂樺彲浠ラ兘涓�1000
+ FaceWidth int32 //杞﹁劯瀹藉害
+ FaceHeight int32 //杞﹁劯楂樺害
+ GrayFaceFlag int32 //杞﹁劯鏄惁涓虹伆搴﹀浘
+
+ CharLocation [20]CRECT //杞︾墝瀛楃鐨勪綅缃�(鍩轰簬澶у浘)
+ CharConfidence [20]CRECT //瀛楃璇嗗埆缃俊搴�
+ CharNum int32 //杞︾墝瀛楃鏁扮洰
+}
diff --git a/gosdk.go b/gosdk.go
index 5f2088e..13abe89 100644
--- a/gosdk.go
+++ b/gosdk.go
@@ -1,11 +1,14 @@
package gosdk
/*
-#cgo CFLAGS: -I. -I./sdk/face/include -I./sdk/darknet/include -I/usr/local/cuda/include -I./sdk/plate/include -w -g
-#cgo CXXFLAGS: -I. -I./sdk/face/include -I./sdk/darknet/include -I/usr/local/cuda/include -I./sdk/plate/include -w -g -std=c++11
-#cgo LDFLAGS: -L/usr/local/cuda/lib64 -L${SRCDIR}/sdk/face/lib/gpu -L${SRCDIR}/sdk/darknet/lib -L${SRCDIR}/sdk/plate/lib
-#cgo LDFLAGS: -Wl,-rpath,${SRCDIR}/sdk/face/lib/gpu:${SRCDIR}/sdk/darknet/lib
-#cgo LDFLAGS: -ldarknet -lTHFaceImage -lTHFeature -lTHFaceProperty -lTHFaceTracking -lcudart -lcublas -lcurand -lrt -ldl -lpthread -lthplateid
+#cgo CFLAGS: -I. -I./sdk/face/include -I./sdk/darknet/include -I/usr/local/cuda/include -w -g
+#cgo CFLAGS: -I./sdk/plate/eparking/include -I./sdk/plate/cloud/include
+#cgo CXXFLAGS: -I. -I./sdk/face/include -I./sdk/darknet/include -I/usr/local/cuda/include -w -g -std=c++11
+#cgo CXXFLAGS: -I./sdk/plate/eparking/include -I./sdk/plate/cloud/include
+#cgo LDFLAGS: -L/usr/local/cuda/lib64 -L${SRCDIR}/sdk/face/lib/gpu -L${SRCDIR}/sdk/darknet/lib
+#cgo LDFLAGS: -L${SRCDIR}/sdk/plate/eparking/lib -L${SRCDIR}/sdk/plate/cloud/lib
+#cgo LDFLAGS: -Wl,-rpath,${SRCDIR}/sdk/face/lib/gpu:${SRCDIR}/sdk/darknet/lib:${SRCDIR}/sdk/plate/cloud/lib
+#cgo LDFLAGS: -ldarknet -lTHFaceImage -lTHFeature -lTHFaceProperty -lTHFaceTracking -lcudart -lcublas -lcurand -lrt -ldl -lpthread -lthplateid -lLPRecognition
#include <stdlib.h>
#include "csdk.h"
*/
@@ -420,7 +423,7 @@
MaxImageWidth: 4096,
MaxImageHeight: 2160,
IsFieldImage: 0,
- MovingImage: 1,
+ MovingImage: 0,
OrderOpt: 0,
LeanCorrection: 1,
ImproveSpeed: 0,
@@ -439,9 +442,9 @@
TwoRowArmy: 1,
Tractor: 1,
Embassy: 1,
- ChangNei: 1,
- MinHang: 1,
- Consulate: 1,
+ ChangNei: 0,
+ MinHang: 0,
+ Consulate: 10,
NewEnergy: 1,
OnlyTwoRowYellow: 0,
OnlyLocation: 0,
@@ -454,13 +457,13 @@
}
// PlateIDDetect plateid detect
-func PlateIDDetect(img SDKImage) []CPlateIDResult {
+func PlateIDDetect(img SDKImage, rcDetect *CRECT) []CPlateIDResult {
data := img.Data
w := img.Width
h := img.Height
var count C.int
- cppos := C.c_api_plate_id_detect(&count, (*C.uchar)(unsafe.Pointer(&data[0])), C.int(w), C.int(h))
+ cppos := C.c_api_plate_id_detect(&count, (*C.uchar)(unsafe.Pointer(&data[0])), C.int(w), C.int(h), (*C.cRECT)(unsafe.Pointer(rcDetect)))
if cppos != nil {
defer C.free(unsafe.Pointer(cppos))
return CPlateIDPosArrayToGoArray(unsafe.Pointer(cppos), int(count))
@@ -470,4 +473,52 @@
func FreePlateIdDetector() int{
return int(C.c_api_plate_id_free())
+}
+
+
+func DefaultPlateIDCloudSDKConfig() *CPlateIDCloudCfg{
+ return &CPlateIDCloudCfg{
+ NImageMode: 0,
+ NRecMode: 0,
+
+ NMinPlateWidth: 60,
+ NMaxPlateWidth: 400,
+
+ NImageWidth: 4096,
+ NImageHeight: 2160,
+
+ NMinHorAngle: -15,
+ NMaxHorAngle: 15,
+ NMinVerAngle: -30,
+ NMaxVerAngle: 30,
+
+ FExpLeftRightR: 1.6,
+ FExpTopR: 6.0,
+ FExpBottomR: 1.5,
+ }
+}
+
+// InitPlateIDCloudSDKDetector init plateid detector
+func InitPlateIDCloudSDKDetector(config *CPlateIDCloudCfg, keyPath, modelPath[]byte) int {
+ return int(C.c_api_plate_id_cloud_init((*C.cPlateIDCloudSDKCfg)(unsafe.Pointer(config)), (*C.char)(unsafe.Pointer(&keyPath[0])), (*C.char)(unsafe.Pointer(&modelPath[0]))))
+}
+
+// PlateIDCloudSDKDetect plateid detect
+func PlateIDCloudSDKDetect(img SDKImage, rcDetect *CRECT) []CPlateIDCloudResult {
+ data := img.Data
+ w := img.Width
+ h := img.Height
+
+ var count C.int
+ cppos := C.c_api_plate_id_cloud_detect(&count, (*C.uchar)(unsafe.Pointer(&data[0])), C.int(w), C.int(h), (*C.cRECT)(unsafe.Pointer(rcDetect)))
+ if cppos != nil {
+ defer C.free(unsafe.Pointer(cppos))
+ return CPlateIDCloudPosArrayToGoArray(unsafe.Pointer(cppos), int(count))
+ }
+ return nil
+}
+
+// FreePlateIDCloudSDKDetector free
+func FreePlateIDCloudSDKDetector() {
+ C.c_api_plate_id_free()
}
\ No newline at end of file
diff --git a/sdk/plate/cloud/include/LPRecognition.h b/sdk/plate/cloud/include/LPRecognition.h
new file mode 100644
index 0000000..f7e1064
--- /dev/null
+++ b/sdk/plate/cloud/include/LPRecognition.h
@@ -0,0 +1,167 @@
+#ifndef _LPRECOGNITION_H_
+#define _LPRECOGNITION_H_
+
+
+#define LPR_API extern "C" __attribute__((visibility("default")))
+
+#define LPR_OK 0 //初始化正确
+#define LPR_KEY_ERROR -1 //未找到加密狗
+
+
+
+//车牌类型
+typedef enum
+{
+ E_PT_NOTKNOWN, //未知类型
+ E_PT_NORMAL_BLUE, //普通蓝牌
+ E_PT_NORMAL_BLACK, //普通黑牌
+ E_PT_NORMAL_YELLOW,//普通单层黄牌
+ E_PT_DOUBLE_YELLOW,//双层黄牌
+ E_PT_POLICE, //白色警牌
+ E_PT_WJ, //白色武警
+ E_PT_ARMY, //白色军牌
+ E_PT_GANG, //港牌
+ E_PT_NONG, //农用车牌----拖拉机
+ E_PT_ENERGY, //新能源车----绿色
+ E_PT_ENERGY_Y, //新能源车----黄色
+ E_PT_INDIVI, //个性化车牌
+ E_PT_EMBASSY, //使馆车
+ E_PT_YINGJI, //应急车牌
+}LPR_LPlateType;
+
+//车身颜色
+typedef enum
+{
+ E_VC_NOTKNOWN, //未知
+ E_VC_WHITE, //白
+ E_VC_SILVER, //灰
+ E_VC_YELLOW, //黄
+ E_VC_RED, //红
+ E_VC_GREEN, //绿
+ E_VC_BLUE, //蓝
+ E_VC_BLACK, //黑
+}LPR_LVehicleColor;
+
+typedef enum
+{
+ E_VC_DARK, //深色
+ E_VC_LIGHT, //浅色
+}LPR_LVehicleBright;
+
+typedef enum
+{
+ E_LPR_RGB,
+ E_LPR_BGR,
+}LPR_ImageType;
+
+typedef struct
+{
+ int iLeft;
+ int iTop;
+ int iRight;
+ int iBottom;
+}LPR_Rect;
+
+typedef struct
+{
+ LPR_ImageType eImageType; //图像类型
+ int iImageMode; //0:为帧模式 1:为场模式
+ int iRecMode; //识别模式,0:单张图片识别,1:视频检测+识别,2:视频多帧融合识别(注:1模式比2模式快,但识别率和捕获率比2低)
+
+ int iResultNum; //输出结果参数,最多支持输出4个结果
+ int iMinPlateWidth; //识别最小车牌宽度
+ int iMaxPlateWidth; //识别最大车牌宽度
+
+ /******************矫正参数******************/
+ int iHorCorrect; //是否做水平倾斜矫正,若不做水平倾斜矫正,则算法内部不会做垂直错切矫正
+ int iVerCorrect; //是否做垂直错切矫正
+
+ int iMinHorAngle;
+ int iMaxHorAngle;//水平矫正角度范围,支持最大角度为[-30°,30°]
+ int iMinVerAngle;
+ int iMaxVerAngle;//垂直矫正角度范围,支持最大角度为[-30°,30°]
+
+ int iPlateBornThr; //车牌输出帧数阈值:既车牌出现大于此帧数,则输出结果
+ int iPlateNumThr; //车牌出现次数阈值:既车牌出现小于此数目,则不输出
+ int iPlateDeadThr; //车牌消失帧数:针对视频应用,车牌消失大于此阈值,进行输出
+
+ int iImageWidth; //图片宽度
+ int iImageHeight; //图片高度
+
+ char pLocalChinese[3]; //本地汉字字符,如果此字符设置为空或者31个省份之外的字,则不使用首汉字
+
+ //此些项针对车型识别有用,其余无用
+ float fExpLeftRightR; //车脸左右扩充(车牌的宽度)倍数 参考值为1.6
+ float fExpTopR; //车脸上部扩充(车牌的高度)倍数 参考值为6.0
+ float fExpBottomR; //车脸下部扩充(车牌的高度)倍数 参考值为1.5
+}LPR_RecParma;
+
+typedef struct
+{
+ int iYear;
+ int iMonth;
+ int iDay;
+ int iHour;
+ int iMinute;
+ int iSecond;
+ int iMilliseconds;
+}LPR_Time;
+
+typedef struct
+{
+ int iYear;
+ int iMonth;
+ int iDay;
+}LPR_DATE;
+typedef struct
+{
+ char number[20]; //识别结果
+ LPR_Rect PlateRect; //车牌位置
+ int x[4];
+ int y[4];
+ int iConfidence; //车牌置信度
+ LPR_LPlateType ePlateType; //车牌类型
+ int iMoveDir; //车辆运动方向 0:朝近运动,1:朝远运动,-1:未知
+ LPR_LVehicleColor eVColor1; //车身主颜色
+ LPR_LVehicleColor eVColor2; //车身次颜色
+ LPR_LVehicleBright eVehicleBright; //车辆深浅色
+ unsigned char *pResultBits; //视频识别模式中抓拍的图片,视频模式识别下有效,需要开辟
+
+ int iFramNo; //视频模式下帧号
+ LPR_Time sTime; //视频识别模式中抓拍此张图的时间
+
+ //针对车脸识别应用此项,其余无用
+ unsigned char *pVehicleFaceImage; //对应的车脸的图片,需要提前开辟内存,开辟个最大内存就可以,宽高可以都为1000
+ int iVehicleFaceWidth; //车脸宽度
+ int iVehicleFaceHeight; //车脸高度
+ int iGrayFaceFlag; //车脸是否为灰度图
+
+ LPR_Rect charLocation[20]; //车牌字符的位置(基于大图)
+ int charConfidence[20]; //字符识别置信度
+ int iCharNum; //车牌字符数目
+}LPR_Result;
+
+LPR_API int LPR_ThreadInit(char* fullkeypath);
+
+LPR_API void LPR_SetRecThr(void* pInstance,int iThr); //设置车牌识别阈值:0~5,0最宽松,5最严格,默认为3
+
+LPR_API void* LPR_Init(LPR_RecParma RecParma); //初始化,每个线程都必须调用一次
+
+LPR_API int LPR_RecImage(unsigned char *pBits, int iWidth, int iHeight ,LPR_Result* pLprResult,LPR_Rect* recROI,void* pInstance);//识别
+
+LPR_API int LPR_RecImage_mobile(unsigned char *pBits, int iWidth, int iHeight ,LPR_Result* pLprResult,LPR_Rect* recROI,void* pInstance);//识别
+
+LPR_API void LPR_Uninit(void* pInstance); //释放
+
+
+
+//云端识别接口
+LPR_API void* LPR_Cloud_Init(LPR_RecParma RecParma, char* fullModel);
+
+LPR_API int LPR_Cloud_RecImage(unsigned char *pBits, int iWidth, int iHeight ,LPR_Result* pLprResult,LPR_Rect* recROI,void* pInstance);//识别
+
+LPR_API void LPR_Cloud_Uninit(void* pInstance);
+
+
+
+#endif
diff --git a/sdk/plate/cloud/lib/libLPRecognition.a b/sdk/plate/cloud/lib/libLPRecognition.a
new file mode 100644
index 0000000..e74c6ec
--- /dev/null
+++ b/sdk/plate/cloud/lib/libLPRecognition.a
Binary files differ
diff --git a/sdk/plate/cloud/lib/libLPRecognition.so b/sdk/plate/cloud/lib/libLPRecognition.so
new file mode 100644
index 0000000..2fcf6a4
--- /dev/null
+++ b/sdk/plate/cloud/lib/libLPRecognition.so
Binary files differ
diff --git a/sdk/plate/cloud/lib/libgfortran.so.3 b/sdk/plate/cloud/lib/libgfortran.so.3
new file mode 100644
index 0000000..9c64281
--- /dev/null
+++ b/sdk/plate/cloud/lib/libgfortran.so.3
Binary files differ
diff --git a/sdk/plate/cloud/lib/libopenblas.so.0 b/sdk/plate/cloud/lib/libopenblas.so.0
new file mode 100644
index 0000000..fc9bec2
--- /dev/null
+++ b/sdk/plate/cloud/lib/libopenblas.so.0
Binary files differ
diff --git a/sdk/plate/cloud/lib/plate_det.model b/sdk/plate/cloud/lib/plate_det.model
new file mode 100644
index 0000000..1e146be
--- /dev/null
+++ b/sdk/plate/cloud/lib/plate_det.model
Binary files differ
diff --git a/sdk/plate/include/TH_ErrorDef.h b/sdk/plate/eparking/include/TH_ErrorDef.h
similarity index 100%
rename from sdk/plate/include/TH_ErrorDef.h
rename to sdk/plate/eparking/include/TH_ErrorDef.h
diff --git a/sdk/plate/include/TH_PlateID.h b/sdk/plate/eparking/include/TH_PlateID.h
similarity index 100%
rename from sdk/plate/include/TH_PlateID.h
rename to sdk/plate/eparking/include/TH_PlateID.h
diff --git a/sdk/plate/lib/libLicenceManager.so b/sdk/plate/eparking/lib/libLicenceManager.so
similarity index 100%
rename from sdk/plate/lib/libLicenceManager.so
rename to sdk/plate/eparking/lib/libLicenceManager.so
Binary files differ
diff --git a/sdk/plate/lib/libthplateid.so b/sdk/plate/eparking/lib/libthplateid.so
similarity index 100%
rename from sdk/plate/lib/libthplateid.so
rename to sdk/plate/eparking/lib/libthplateid.so
Binary files differ
--
Gitblit v1.8.0