![](https://s5-media.51cto.com/ost/pc/static/noavatar.gif)
#HarmonyOS NEXT thể nghiệm quan # cái gì? Không cần tay thua thân phận chứng tin tức? Nguyên sang
Phát hiện vấn đề
Hôm nay lại một lần thật danh chứng thực phát hiện đại bộ phận phần mềm thân phận tin tức đệ trình còn dừng lại nơi tay thua giai đoạn, thật đúng là phiền toái a. Đặc biệt là đối trí nhớ tương đối kém người già càng là một loại tai nạn, tay thua không chỉ có hiệu suất thấp hơn nữa dễ dàng làm lỗi, có người còn cần đối với thân phận chứng nhìn một chữ một chữ đưa vào, hiệu suất trực tiếp hàng đến thấp nhất.
Như vậy thông minh ta trước tiên nghĩ đến đến chính là thân phận chứng phân biệt công năng, chỉ cần mở ra camera một phách chiếu, thân phận tin tức liền có thể phân biệt hơn nữa bảo tồn, lần sau sử dụng trực tiếp nhanh chóng phục chế có thể, thật là phương tiện mau lẹ, vậy ở Hồng Mông hệ thống thực hiện một thân phận chứng phân biệt công năng đi!
Khởi công!
Giải quyết vấn đề
Khai phá điều kiện
Phần cứng: Duy trì api12 HarmoneyOS NEXT hệ thống di động hoặc là cứng nhắc
Phần mềm: DevEco Studio NEXT 5.0.3.403 Api 12 ngôn ngữ: Thuyền cứu nạn biên trình ngôn ngữ ( ArkTs )
UI khai phá dàn giáo: Thuyền cứu nạn UI dàn giáo, ArkUI
Công năng phân tích
Muốn thực hiện tấm card rà quét
1. UI giao diện thực hiện
2. Duy trì bao dẫn vào
3. Rà quét giao diện kéo
4. Tạp chứng rà quét
5. Tạp chứng phân biệt
6. Tạp chứng nội dung phân tích
Bước đi
1.1 đầu tiên thực hiện ui giao diện
Trước xây dựng một cái kéo phân biệt giao diện ui giao diện, phương tiện chúng ta tiến hành kế tiếp thao tác
Số hiệu thực hiện như sau
@Provide('pathStack') pathStack: NavPathStack = new NavPathStack()
@Builder
PageMap(name: string) {
if (name === 'cardIdentify') {
CardDemoPage()
}
}
build() {
Navigation(this.pathStack) {
Image($r('app.media.card'))
.width('100%')
.height(300)
.objectFit(ImageFit.Fill)
Button(' bắt đầu phân biệt ', { stateEffect: true, type: ButtonType.Capsule })
.width('50%')
.height(40)
.onClick(() => {
this.pathStack.pushPath({ name: 'cardIdentify' })
})
}.title(' thân phận chứng phân biệt ').navDestination(this.PageMap)
.mode(NavigationMode.Stack)
}
2.1 đem tạp chứng phân biệt khống kiện tương quan loại tăng thêm.
import { CardRecognition, CallbackParam, CardType, CardSide } from "@kit.VisionKit";
Phối trí giao diện bố cục, lựa chọn yêu cầu phân biệt tạp chứng loại hình, cùng yêu cầu phân biệt tạp chứng giao diện, ở hồi điều trung thu hoạch kết quả phản hồi giá trị.
3.1 thân phận chứng phân biệt giao diện kéo
cardSide thuộc tính có thể thiết trí chúng ta muốn phân biệt mấy cái mặt
Chúng ta tiến vào nguyên mã có thể nhìn đến như sau
FRONT = 0 chỉ rà quét hình người mặt
BACK = 1 chỉ rà quét quốc huy mặt
DEFAULT = 2 chính phản diện đều rà quét
Nguyên mã có thể nhìn đến CardRecognition chính là chúng ta muốn phân biệt tạp chứng lắp ráp
4.1 tạp chứng rà quét giao diện
Đầu tiên chúng ta trước sử dụng người nào đó thân phận chứng tiến hành thí nghiệm, có thể nhìn đến lắp ráp tự thân nhất tấm card phân biệt có một cái định vị che tráo số hiệu thực hiện như sau
Stack({ alignContent: Alignment.Top }) {
Stack() {
this.cardDataShowBuilder()
}
.width('80%')
.height('80%')
CardRecognition({
supportType: CardType.CARD_ID,
cardSide: CardSide.FRONT,
callback: ((params: CallbackParam) => {
hilog.info(0x0001, TAG, `params code: ${params.code}`)
if (params.code === -1) {
this.pathStack.pop()
}
hilog.info(0x0001, TAG, `params cardType: ${params.cardType}`)
if (params.cardInfo?.front!== undefined) {
this.cardDataSource.push(params.cardInfo?.front)
}
if (params.cardInfo?.back!== undefined) {
this.cardDataSource.push(params.cardInfo?.back)
}
if (params.cardInfo?.main!== undefined) {
this.cardDataSource.push(params.cardInfo?.main)
}
hilog.info(0x0001, TAG, `params cardInfo front: ${JSON.stringify(params.cardInfo?.front)}`)
hilog.info(0x0001, TAG, `params cardInfo back: ${JSON.stringify(params.cardInfo?.back)}`)
})
})
}
.width('100%')
.height('100%')
Khi chúng ta điểm đánh quay chụp cái nút lúc sau
Hệ thống api sẽ ở camera giao diện sinh thành trước mặt phân biệt hình ảnh đồ tầng, sau đó tiến hành phân biệt, ( phân biệt hồi điều phương pháp như sau )
Hồi điều tham số
callback: Callback<CallbackParam>;
Sử dụng
callback: ((params: CallbackParam) => {
if (params.code === -1) {
this.pathStack.pop()
}
if (params.cardInfo?.front!== undefined) {
this.cardDataSource.push(params.cardInfo?.front)
}
if (params.cardInfo?.back!== undefined) {
this.cardDataSource.push(params.cardInfo?.back)
}
if (params.cardInfo?.main!== undefined) {
this.cardDataSource.push(params.cardInfo?.main)
}
})
Sau đó định nghĩa một cái tham số tới tiếp thu phản hồi nội dung
@State cardDataSource: Record<string, string>[] = []
Chấp hành trình tự sau có thể thông qua debug phát hiện, phản hồi số liệu kết cấu loại hình như sau
Căn cứ số liệu nội dung chúng ta sinh thành một cái đối ứng thật thể tới tiếp thu tham số
export class IdentityInfo {
address: string;
birth: string;
cardImageUri: string;
idNumber: string;
name: string;
nationality: string;
originalImageUri: string;
sex: string;
constructor(
address: string,
birth: string,
cardImageUri: string,
idNumber: string,
name: string,
nationality: string,
originalImageUri: string,
sex: string
) {
this.address = address;
this.birth = birth;
this.cardImageUri = cardImageUri;
this.idNumber = idNumber;
this.name = name;
this.nationality = nationality;
this.originalImageUri = originalImageUri;
this.sex = sex;
}
}
Sinh thành đối ứng phân tích phương pháp, phản hồi một chữ phù thông đồng quá text lắp ráp tới triển lãm kỹ càng tỉ mỉ tin tức
getJson(json:string):string{
let txt:IdentityInfo=JSON.parse(json)
let rtTxt:string= "Hình người mặt tin tức như sau:\n" +
"Tên họ:" +txt.name+ "\n" +
"Dân tộc:" +txt.nationality + "\n" +
"Giới tính:" +txt.sex + "\n" +
"Số thẻ:" +txt.idNumber+ "\n" +
"Địa chỉ:" +txt.address+ "\n"
return rtTxt
}
Text(this.getJson(JSON.stringify(cardData)))
.width('100%')
.fontSize(12)
Như vậy chúng ta liền ở Hồng Mông trung thực hiện tạp chứng hình người mặt phân biệt cùng với số liệu phân tích.
Nếu yêu cầu thực hiện chính phản diện phân biệt, liền đem cardSide thiết trí vì CardSide.DEFAULT, giao diện triển lãm như sau
Lúc này số liệu tiếp thu yêu cầu sử dụng list tới thực hiện ( số hiệu như sau )
@Builder
cardDataShowBuilder() {
Column(){
List() {
ForEach(this.cardDataSource, (cardData: Record<string, string>,index:number) => {
ListItem() {
Column() {
Text((JSON.stringify(cardData)))
.width('100%')
.fontSize(12)
}
}
})
}
.listDirection(Axis.Vertical)
.alignListItem(ListItemAlign.Center)
.margin({
top: 50
})
.width('100%')
.height('100%')
}
}
Sinh thành tin tức như sau, sau đó căn cứ phản hồi json tin tức sinh thành đối ứng thật thể đi phân tích triển lãm liền hoàn thành lạc
Như vậy đã có thể bớt việc nhiều lạp
![](https://s5-media.51cto.com/ost/pc/static/noavatar.gif)