編輯:關於Android編程
安裝文通車牌演示程序plate_id_sample_service.apk。
支持Android2.3 –5.1
在首次調用時提供序列號或激活文件進行激活。
1、在線序列號激活方式。
由文通公司提供含有序列號的Excel文件,用戶在調用程序中指定sn參數即用於該設備的某序列號,首次調用識別時設備須聯網。可指定綁定設備deviceid或綁定SIM卡序號。默認綁定deviceid。
2、離線文件激活方式。
用戶先提供文通公司含有deviceid或androidid的Excel文件(第一列為deviceid,第二列為androidid),然後文通公司提供對應設備的激活文件壓縮包,壓縮包中激活文件的數目與設備數目一致,以[deviceid]_cp.txt命名,用戶在調用程序中指定authfile參數即激活文件的路徑和名稱,首次調用時設備無需聯網。如authfile參數為null或等於””時,默認激活文件路徑為根目錄下的[deviceid]_cp.txt,當激活文件存在時做此激活操作。
3、TF卡模式。
需使用文通公司授權的TF卡。
4、 項目授權方式。
項目授權文件中限制如下內容:開發碼參數、用戶程序包名、識別核心版本號、使用截止時間、用戶程序名稱、用戶公司名稱;
開發碼與調用識別時傳遞的devcode參數比對,開發碼由文通公司與項目授權文件一並提供;
程序包名與AndroidMenifest.xml中package比對;
使用截止時間與當前系統時間比對;
授權文件中核心版本號與底層核心版本號比對, 默認限制前兩位;
項目名稱與strings.xml中app_name比對;
公司名稱與strings.xml中company_name比對;
項目授權文件需放入項目assets文件夾中。
注意:如果使用1或2 所列的激活方式,請選擇指定sn參數或authfile參數 ,不要同時指定sn參數和authfile參數,否則將只按1的方式進行激活,設置此兩個參數請參見下文代碼示例。
**采用項目授權無需調用驗證授權服務
目前支持的JPEG圖像的分辨率為2048*1536像素及以下,支持圖像中車牌的默認實際寬度為80-400像素。
圖像文字清晰,人眼可辨別;
對比度、亮度適中;
拍攝時做好聚焦,以免圖像模糊不清;
拍攝時不要使車牌過度傾斜;
盡量不要使拍攝角度傾斜過大,以免造成圖像變形成梯形;
用戶可以調用Activity或Service的方式集成識別功能,識別Activity只支持JPG圖片格式,識別Service也支持JPG圖片格式,推薦使用Service方式集成;用戶可以通過調用函數的方式設置識別參數,詳情見後面章節。
注意將“plate_id_sdk集成所需文件”文件夾下的所有內容放到Android項目的根目錄下;注意拷貝assets、lib、libs及res的內容到您的項目中;注意將AndroidManifest.xml裡面的內容和res/values/strings.xml的內容合並到項目相關文件中;如果采用TF卡授權方式,請將 “TF”文件夾中的相關文件替換到項目中;如果采用序列號激活方式綁定設備,請將“序列號” 文件夾中的相關文件替換到項目中;
注意當與文通Android證件識別集成到一個項目中時,請刪除lib文件夾下的misc_crypto.jar(如果有的話),否則會引起沖突。
識別Activity具有如下參數:
類型
名稱
說明
示例
String
cls
接收識別返回值的包名類名
com.wintone.demo.PlateIDRunner
String
pic
圖片路徑
int
imageformat
圖像格式
1
int
width
圖像寬度
420
int
height
圖像高度
232
int
bVertFlip
0
int
bDwordAligned
1
boolean
GetVersion
是否需要獲取開發包的版本信息
true
String
sn
序列號,第一次調用時激活,如不設置此項需通過自動激活或手動激活頁面輸入序列號。
請輸入大寫序列號
String
authfile
激活文件路徑,激活文件中保存了用於該設備的序列號和激活碼,不用時可設置為””
String
userdata
用戶想在識別後和識別結果一起傳回的字符串
String
returntype
接收識別結果的方式
默認值””,代表用第一種方式接收識別結果;值”withvalue”代表用第二種方式。詳見示例程序章節。
識別Activity具有如下返回值:
類型
名稱
說明
備注
int
nRet
識別結果標志
0成功;
1FindPlate(沒有找到車牌)
2車牌評價值(0分)
3車牌評價值(不及格)
4車牌識別分數(0分)
5車牌識別分數(不及格)
-1001 讀jpg圖片錯誤,可能是圖片超過2048*1536分辨率
-10001 未調用初始化函數
-10003 沒有激活或激活碼校驗失敗
-10004 指定序列號為null或""
-10005 未連接到服務器
-10006 獲取激活碼失敗或未連接到服務器
-10007 授權服務器無此序列號
-10008 序列號已使用
-10009 無法創建授權文件
-10010 校驗激活碼失敗
-10011 其他錯誤
-10012 未激活
-10015激活文件校驗失敗
-10401 開發碼錯誤或未找到authmode.lsc文件
-10402 設備型號未授權
-10500 未檢測到SIM卡
-1008 未讀到TF卡;
-1005 TF卡授權模式下使用了非TF卡授權的動態庫;
20 所插TF中的license\license.dat授權文件不匹配;或非TF卡授權模式下使用了TF卡模式動態庫;
-8:license\license.dat授權文件未找到
-10600 其他錯誤;
-10601 開發碼錯誤;
-10602 程序包名錯誤;
-10603 截止時間過期;
-10604 核心版本號錯誤;
-10605 項目名稱錯誤;
-10606 公司名稱錯誤。
String[]
GetFieldName
字段名
"車牌號", "車牌顏色", "車牌顏色代碼", "車牌類型代碼", "整牌可信度", "亮度評價","車牌運動方向", "車牌左上點橫坐標", "車牌左上點縱坐標", "車牌右下點橫坐標", "車牌右下點縱坐標", "時間","車的亮度", "車的顏色"
String[]
GetRecogResult
字段值
車牌顏色編碼:
0 未知
1 藍
2 黃
3 白
4 黑
5 綠
車牌類型編碼:
0 未知車牌
1 藍牌小汽車
2 黑牌小汽車
3 單排黃牌
4 雙排黃牌(大車尾牌,農用車)
5 警車車牌
6 武警車牌
7 個性化車牌
8 單排軍車
9 雙排軍車
10 使館牌
11 香港牌
12 拖拉機
車輛亮度編碼:
0 深
1 淺
車輛顏色編碼:
0 白
1 灰(銀)
2 黃
3 粉
4 紅
5 綠
6 藍
7 棕
8 黑
運動方向編碼:
1 左
2 右
3 上
4 下
String
ReturnGetVersion
取版本信息,如果定義了GetVersion為true才能取版本信息
String
ReturnUserData
返回用戶自定義數據參數userdata
String
ReturnLPFileName
用戶指定的圖像路徑
Service接口包括兩個Service,分別是驗證ServiceAuthService和識別Service RecogService:
驗證Service所需參數:序列號方式激活時用sn參數;激活文件方式時用authfile參數;不要同時指定sn參數和authfile參數,否則將只按序列號方式進行激活;如果未設置sn參數和authfile參數,將在根目錄尋找激活文件。
TF卡授權方式不用調用驗證Service,只調用識別Service即可。
驗證Service調用順序:bindService、激活驗證函數getAuth、unbindService;即每次產生驗證Service新實例完成驗證和激活的操作。
識別Service調用順序:在驗證Service的返回值ReturnAuthority為0時,每次識別時調用依次調用一次bondService、讀取初始化狀態函數getInitPlateIDSDK、設置識別參數的函數setRecogArgu、識別函數doRecogDetail、unbondService。
注意:Service方式支持JEPG圖像文件識別。
public String[]doRecogDetail(PlateRecognitionParameter prp)//用於識別JEPG圖片。
//綁定授權驗證服務
Intent authIntent = new Intent(MainActivity.this, AuthService.class);
bindService(authIntent, authConn, Service.BIND_AUTO_CREATE);
//授權驗證服務綁定後的操作
public ServiceConnection authConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
authBinder = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(TAG, "authConn onServiceConnected");
authBinder = (AuthService.MyBinder) service;
Toast.makeText(getApplicationContext(), "授權驗證服務 綁定成功", Toast.LENGTH_SHORT).show();
try {
// sn:采用序列號方式激活時設置此參數,否則寫""
// authfile:采用激活文件方式激活時設置此參數,否則寫""
// 以上倆個參數都不為""時按序列號方式激活;當sn和authfile為""時會在根目錄下找激活文件 xxxxxxxxxxxxxxx_cp.txt
ReturnAuthority = authBinder.getAuth(sn, authfile);
if (ReturnAuthority != 0) {
recogButton.setEnabled(false);
String[] str = {"" + ReturnAuthority};
getResult(str);
Toast.makeText(getApplicationContext(), "授權驗證失敗", Toast.LENGTH_SHORT).show();
} else {
//若授權成功,則啟動識別服務
recogIntent = new Intent(MainActivity.this, RecogService.class);
//startService(recogIntent);
Toast.makeText(getApplicationContext(), "授權驗證成功", Toast.LENGTH_SHORT).show();
}
}catch (Exception e) {
e.printStackTrace();
Log.i(TAG, "e=" + e.toString());
}finally{
if (authBinder != null) {
unbindService(authConn);//解綁授權驗證服務
}
}
}
};
//綁定識別服務
recogIntent = new Intent(MainActivity.this, RecogService.class);
bindService(recogIntent, recogConn, Service.BIND_AUTO_CREATE);
//識別服務綁定後的操作
public ServiceConnection recogConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
recogConn = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
recogBinder = (RecogService.MyBinder) service;
iInitPlateIDSDK = recogBinder.getInitPlateIDSDK();
if (iInitPlateIDSDK != 0) {
nRet = iInitPlateIDSDK;
String[] str = { "" + iInitPlateIDSDK };
getResult(str);
} else {
PlateCfgParameter cfgparameter = new PlateCfgParameter();
cfgparameter.armpolice = 4;
cfgparameter.armpolice2 = 16;
cfgparameter.embassy = 12;
cfgparameter.individual = 0;
cfgparameter.nContrast = 0;
cfgparameter.nOCR_Th = 2;
cfgparameter.nPlateLocate_Th = 5;
cfgparameter.onlylocation = 15;
cfgparameter.tworowyellow = 2;
cfgparameter.tworowarmy = 6;
cfgparameter.szProvince = "";
cfgparameter.onlytworowyellow = 11;
cfgparameter.tractor = 8;
cfgparameter.bIsNight = 0;
recogBinder.setRecogArgu(cfgparameter, imageformat, bVertFlip,
bDwordAligned);
PlateRecognitionParameter prp = new PlateRecognitionParameter();
prp.height = height;
prp.width = width;
prp.pic = recogPicPath;
fieldvalue = recogBinder.doRecogDetail(prp);
nRet = recogBinder.getnRet();
if (nRet != 0) {
String[] str = { "" + nRet };
getResult(str);
} else {
getResult(fieldvalue);
}
}
if (recogBinder != null) {
unbindService(recogConn);
}
}
};
public void setRecogArgu(PlateCfgParameter cfgparameter, int imageformat, int bVertFlip, int bDwordAligned)
說明:本函數存在於識別Service內,參數cfgparameter見下表,其他參數請勿修改。
類型
參數名稱
取值范圍
默認值
int
nPlateLocate_Th
定位阈值 (取值范圍0-9,7:默認阈值,0:最寬松的阈值,9:最嚴格的阈值)
5
int
nOCR_Th
識別阈值(取值范圍0-9,5:默認阈值0:最寬松的阈值9:最嚴格的阈值)
2
int
bIsAutoSlope
是否要傾斜校正
1
int
nSlopeDetectRange
傾斜校正的范圍(取值范圍0-16)
0
String
szProvince
省份順序
int
nContrast
清晰度指數(取值范圍0-9,最模糊時設為1;最清晰時設為9)
0(不校驗)
int
bIsNight
是否夜間模式:1是;0不是
0
int
individual
是否開啟個性化車牌:0是;1不是
0
int
tworowyellow
雙層黃色車牌是否開啟:2是;3不是
3
int
armpolice
單層武警車牌是否開啟:4是;5不是
5
int
tworowarmy
雙層軍隊車牌是否開啟:6是;7不是
7
int
tractor
農用車車牌是否開啟:8是;9不是
9
int
onlytworowyellow
只識別雙層黃牌是否開啟:10是;11不是
11
int
embassy
使館車牌是否開啟:12是;13不是
13
int
onlylocation
只定位車牌是否開啟:14是;15不是
15
int
armpolice2
雙層武警車牌是否開啟:16是;17不是
17
public String[] doRecogDetail(PlateRecognitionParameter prp)
說明:本函數存在於識別Service內,參數prp見下表。
識別接口,該函數返回的是識別後的數據。
類型
參數名稱
默認值
byte[]
picByte
相機獲取的字節數組數據
String
pic
拍照識別,圖片的存儲路徑
int
width
圖像寬度
int
heigth
圖像高度
String
userdata
用戶自定義數據參數userdata
String
devCode
開發碼
String
dataFile
時間授權文件路徑
String
versionfile
版本授權文件路徑
boolean
isCheckDevType
是否檢查設備型號
false
int
plateIDCfg.bRotate
預覽圖片在進行識別時需要旋轉的角度:
0:不旋轉;1:90度;2:旋轉180;3:旋轉270
0
int
plateIDCfg.left
掃描框在預覽圖片上所對應的左坐標點
0
int
plateIDCfg.right
掃描框在預覽圖片上所對應的右坐標點
0
int
plateIDCfg.top
掃描框在預覽圖片上所對應的上坐標點
0
int
plateIDCfg.bottom
掃描框在預覽圖片上所對應的下坐標點
0
public int getnRet()獲取識別後的返回值 nRet (詳見4.2返回結果說明)
將assets文件夾、lib文件夾、libs文件夾全部按照下圖的目錄結構復制到集成的項目中:
先選中所有的jar包,然後add Path,右鍵lib文件夾點擊Buid Path選項並選擇config buid Path選項,點擊Order and Export選項,將android_auth.jar、ksoap2-android-assembly-2.4-jar-with-dependencies.jar、plate_id_sdk.jar、
bcprov-ext-jdk15-146.jar、pki.jar等全部勾選並點擊“確定”按鈕,如圖:
將res的內容合並到您的項目中;注意將AndroidManifest.xml裡面的內容和res/values/strings.xml的內容合並到項目相關文件中
打開要集成的項目的AndroidManifest.xml文件,將以下權限、相應的service和activity加入其中:
android:name="com.wintone.plateid.AuthService"
android:enabled="true" >
android:name="com.wintone.plateid.RecogService"
android:enabled="true" >
android:name="com.wintone.plateid.MemoryCameraActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboard|keyboardHidden">
android:name="com.wintone.plateid.MemoryResultActivity">
android:name="com.wintone.plateid.ResultActivity"
android:screenOrientation="portrait" />
android:configChanges="keyboardHidden|orientation">
注冊時請注意更換包名!!
授權服務的定義:(用戶需將從銷售手中獲得的25位序列號替換sn,
ReturnAuthority變量為授權服務成功與否的標志,如果為0則證明授權成功)
授權服務的代碼集成(具體變量的定義請詳見MainActivity.java,該代碼需在識別之前調用)
public ServiceConnection authConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
authBinder = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
authBinder = (AuthService.MyBinder) service;
Toast.makeText(getApplicationContext(), R.string.auth_check_service_bind_success, Toast.LENGTH_SHORT).show();
try {
PlateAuthParameter pap = new PlateAuthParameter();
pap.sn = sn;
pap.authFile = authfile;
// sn:采用序列號方式激活時設置此參數,否則寫""
// authfile:采用激活文件方式激活時設置此參數,否則寫""
// 以上倆個參數都不為""時按序列號方式激活;當sn和authfile為""時會在根目錄下找激活文件xxxxxxxxxxxxxxx_cp.txt
ReturnAuthority = authBinder.getAuth(pap);
if (ReturnAuthority != 0) {
Toast.makeText(getApplicationContext(),getString(R.string.license_verification_failed)+":"+ReturnAuthority,Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),R.string.license_verification_success,Toast.LENGTH_LONG).show();
}
}catch (Exception e) {
Toast.makeText(getApplicationContext(), R.string.failed_check_failure, Toast.LENGTH_SHORT).show();
e.printStackTrace();
}finally{
if (authBinder != null) {
unbindService(authConn);
}
}
}
授權服務的調用:(在Activity的oncreate()中調用,必須在進入拍照界面前進行調用)
Intent authIntent = new Intent(MainActivity.this, AuthService.class);
bindService(authIntent,authConn,Service.BIND_AUTO_CREATE);
Intent cameraintent = new Intent(MainActivity.this,MemoryCameraActivity.class);
cameraintent.putExtra("camera", false);
startActivity(cameraintent);
Intent video_intent = new Intent();
video_intent.setClass(getApplicationContext(), MemoryCameraActivity.class);
video_intent.putExtra("camera", true);
startActivity(video_intent);
Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT);
selectIntent.addCategory(Intent.CATEGORY_OPENABLE);
selectIntent.setType("image/*");
Intent wrapperIntent = Intent.createChooser(selectIntent,"Select Picture");
startActivityForResult(wrapperIntent, SELECT_RESULT_CODE);
綁定識別服務
Intent authIntent = new Intent(MemoryCameraActivity.this,
RecogService.class);
bindService(authIntent, recogConn, Service.BIND_AUTO_CREATE);
識別服務代碼
public ServiceConnection recogConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
recogConn = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
recogBinder = (RecogService.MyBinder) service;
iInitPlateIDSDK = recogBinder.getInitPlateIDSDK();
if (iInitPlateIDSDK != 0) {
nRet = iInitPlateIDSDK;
String[] str = { "" + iInitPlateIDSDK };
getResult(str);
}
// recogBinder.setRecogArgu(recogPicPath, imageformat,
// bGetVersion, bVertFlip, bDwordAligned);
PlateCfgParameter cfgparameter = new PlateCfgParameter();
cfgparameter.armpolice = 4;
cfgparameter.armpolice2 = 16;
cfgparameter.embassy = 12;
cfgparameter.individual = 0;
// cfgparameter.nContrast = 9;
cfgparameter.nOCR_Th = 0;
cfgparameter.nPlateLocate_Th = 5;
cfgparameter.onlylocation = 15;
cfgparameter.tworowyellow = 2;
cfgparameter.tworowarmy = 6;
cfgparameter.szProvince = "";
cfgparameter.onlytworowyellow = 11;
cfgparameter.tractor = 8;
cfgparameter.bIsNight = 1;
recogBinder.setRecogArgu(cfgparameter, imageformat, bVertFlip,
bDwordAligned);
// fieldvalue = recogBinder.doRecog(recogPicPath, width,
// height);
if (recogBinder != null) {
unbindService(recogConn);
}
}
};
如果通過以上步驟進行集成,並出現相應的集成問題,請及時聯系技術開發人員。
用戶向北京文通科技有限公司的銷售提供需要綁定的一些參數,然後銷售會給用戶一個項目授權文件(authmode.lsc);然後將assets文件夾、lib文件夾、libs文件夾全部按照下圖的目錄結構復制到集成的項目中並將新得到的authmode.lsc復制進集成項目中的assets文件夾內:
先選中所有的jar包,然後add Path,右鍵lib文件夾點擊Buid Path選項並選擇config buid Path選項,點擊Order and Export選項,將android_auth.jar、ksoap2-android-assembly-2.4-jar-with-dependencies.jar、plate_id_sdk.jar、
bcprov-ext-jdk15-146.jar、pki.jar等全部勾選並點擊“確定”按鈕,如圖:
打開要集成的項目的AndroidManifest.xml文件,將以下權限、相應的service和activity加入其中:
android:name="com.wintone.plateid.MainActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustUnspecified|stateHidden" >
android:name="com.wintone.plateid.AuthService"
android:enabled="true" >
android:name="com.wintone.plateid.RecogService"
android:enabled="true" >
android:name="com.wintone.plateid.MemoryCameraActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboard|keyboardHidden">
android:name="com.wintone.plateid.MemoryResultActivity">
android:name="com.wintone.plateid.ResultActivity"
android:screenOrientation="portrait" />
android:configChanges="keyboardHidden|orientation">
注冊時請注意更換包名!!
然後再打開res/values/strings.xml,將以下內容復制進去,其中的內容要改成用戶提供的相應信息:
Intent cameraintent = new Intent(MainActivity.this,MemoryCameraActivity.class);
cameraintent.putExtra("camera", false);
startActivity(cameraintent);
Intent video_intent = new Intent();
video_intent.setClass(getApplicationContext(), MemoryCameraActivity.class);
video_intent.putExtra("camera", true);
startActivity(video_intent);
Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT);
selectIntent.addCategory(Intent.CATEGORY_OPENABLE);
selectIntent.setType("image/*");
Intent wrapperIntent = Intent.createChooser(selectIntent,"Select Picture");
startActivityForResult(wrapperIntent, SELECT_RESULT_CODE);
綁定識別服務
Intent authIntent = new Intent(MemoryCameraActivity.this,
RecogService.class);
bindService(authIntent, recogConn, Service.BIND_AUTO_CREATE);
識別服務代碼
public ServiceConnection recogConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
recogConn = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
recogBinder = (RecogService.MyBinder) service;
iInitPlateIDSDK = recogBinder.getInitPlateIDSDK();
if (iInitPlateIDSDK != 0) {
nRet = iInitPlateIDSDK;
String[] str = { "" + iInitPlateIDSDK };
getResult(str);
}
// recogBinder.setRecogArgu(recogPicPath, imageformat,
// bGetVersion, bVertFlip, bDwordAligned);
PlateCfgParameter cfgparameter = new PlateCfgParameter();
cfgparameter.armpolice = 4;
cfgparameter.armpolice2 = 16;
cfgparameter.embassy = 12;
cfgparameter.individual = 0;
// cfgparameter.nContrast = 9;
cfgparameter.nOCR_Th = 0;
cfgparameter.nPlateLocate_Th = 5;
cfgparameter.onlylocation = 15;
cfgparameter.tworowyellow = 2;
cfgparameter.tworowarmy = 6;
cfgparameter.szProvince = "";
cfgparameter.onlytworowyellow = 11;
cfgparameter.tractor = 8;
cfgparameter.bIsNight = 1;
recogBinder.setRecogArgu(cfgparameter, imageformat, bVertFlip,
bDwordAligned);
// fieldvalue = recogBinder.doRecog(recogPicPath, width,
// height);
if (recogBinder != null) {
unbindService(recogConn);
}
}
};
如果通過以上步驟進行集成,並出現相應的集成問題,請及時聯系技術開發人員。
用戶向北京文通科技有限公司的銷售索要authmode.lsc文件和TF存儲器;然後將assets文件夾、lib文件夾、libs文件夾全部按照下圖的目錄結構復制到集成的項目中並將新得到的authmode.lsc復制進集成項目中的assets文件夾內:
先選中所有的jar包,然後add Path,右鍵lib文件夾點擊Buid Path選項並選擇config buid Path選項,點擊Order and Export選項,將android_auth.jar、ksoap2-android-assembly-2.4-jar-with-dependencies.jar、plate_id_sdk.jar、
bcprov-ext-jdk15-146.jar、pki.jar等全部勾選並點擊“確定”按鈕,如圖:
打開要集成的項目的AndroidManifest.xml文件,將以下權限、相應的service和activity加入其中:
android:name="com.wintone.plateid.AuthService"
android:enabled="true" >
android:name="com.wintone.plateid.RecogService"
android:enabled="true" >
android:name="com.wintone.plateid.MemoryCameraActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboard|keyboardHidden">
android:name="com.wintone.plateid.MemoryResultActivity">
android:name="com.wintone.plateid.ResultActivity"
android:screenOrientation="portrait" />
android:configChanges="keyboardHidden|orientation">
注冊時請注意更換包名!!
Intent cameraintent = new Intent(MainActivity.this,MemoryCameraActivity.class);
cameraintent.putExtra("camera", false);
startActivity(cameraintent);
Intent video_intent = new Intent();
video_intent.setClass(getApplicationContext(), MemoryCameraActivity.class);
video_intent.putExtra("camera", true);
startActivity(video_intent);
Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT);
selectIntent.addCategory(Intent.CATEGORY_OPENABLE);
selectIntent.setType("image/*");
Intent wrapperIntent = Intent.createChooser(selectIntent,"Select Picture");
startActivityForResult(wrapperIntent, SELECT_RESULT_CODE);
將示例代碼中集成所需文件夾內的TF卡授權文件夾內的授權文件復制到項目中的assets文件夾內。
綁定識別服務
Intent authIntent = new Intent(MemoryCameraActivity.this,
RecogService.class);
bindService(authIntent, recogConn, Service.BIND_AUTO_CREATE);
識別服務代碼
public ServiceConnection recogConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
recogConn = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
recogBinder = (RecogService.MyBinder) service;
iInitPlateIDSDK = recogBinder.getInitPlateIDSDK();
if (iInitPlateIDSDK != 0) {
nRet = iInitPlateIDSDK;
String[] str = { "" + iInitPlateIDSDK };
getResult(str);
}
// recogBinder.setRecogArgu(recogPicPath, imageformat,
// bGetVersion, bVertFlip, bDwordAligned);
PlateCfgParameter cfgparameter = new PlateCfgParameter();
cfgparameter.armpolice = 4;
cfgparameter.armpolice2 = 16;
cfgparameter.embassy = 12;
cfgparameter.individual = 0;
// cfgparameter.nContrast = 9;
cfgparameter.nOCR_Th = 0;
cfgparameter.nPlateLocate_Th = 5;
cfgparameter.onlylocation = 15;
cfgparameter.tworowyellow = 2;
cfgparameter.tworowarmy = 6;
cfgparameter.szProvince = "";
cfgparameter.onlytworowyellow = 11;
cfgparameter.tractor = 8;
cfgparameter.bIsNight = 1;
recogBinder.setRecogArgu(cfgparameter, imageformat, bVertFlip,
bDwordAligned);
// fieldvalue = recogBinder.doRecog(recogPicPath, width,
// height);
if (recogBinder != null) {
unbindService(recogConn);
}
}
};
如果通過以上步驟進行集成,並出現相應的集成問題,請及時聯系技術開發人員。
概述:與Android的Animation控件相比,Animator與LayoutAnimator處理後的控件完成動畫效果後不會回復原狀。Animator只使用與View
使用adb shell procrank手機中的sh是經過精簡過的,有些手機可能沒有 procrank 命令,可以使用genymotion模擬器,或是自己安裝procra
Content Providers是Android中四大組件之一,用於管理應用程序訪問結構化的數據。Content Providers可以壓縮數據(They encaps
相對於在Android2.x版本上出現的長按、點擊事件的效果,不得不說,滑動操作具有