99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙 java 版本二維碼識(shí)別掃描演示

OpenHarmony技術(shù)社區(qū) ? 來(lái)源:HarmonyOS技術(shù)社區(qū) ? 作者:HarmonyOS技術(shù)社區(qū) ? 2022-01-04 14:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

周日在酒店擼了一下午,加晚上到12點(diǎn),終于把攝像頭掃碼的 Java 版本擼了個(gè)大概。

可以實(shí)現(xiàn)的效果就是打開(kāi)攝像頭掃描一張二維碼圖片然后顯示二維碼里面的內(nèi)容,看個(gè)視頻一睹為快吧(界面待優(yōu)化):

可以看到二維碼掃描成功之后會(huì)在屏幕底下彈出一個(gè)帶有內(nèi)容的氣泡。

其實(shí)我也不知道是怎么回事,對(duì)于掃碼這么高頻的需求官方竟然沒(méi)有集成進(jìn)來(lái)。

PS:最新的消息 js 已經(jīng)集成了,但是 java 還沒(méi)有,只有一個(gè)生成二維碼的代碼。

我翻了全網(wǎng)的文檔找到了幾個(gè)相關(guān)的:

這個(gè)是官方的 codelabs 的一篇帖子,無(wú)法模擬運(yùn)行,就等于是個(gè)帖子,而且這帖子還被許多網(wǎng)友搬到了博客上。

https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/HarmonyOS-QRCode

這個(gè)帖子本身沒(méi)毛病,但是他最大的問(wèn)題就是沒(méi)搞定,具體說(shuō)來(lái)就是給你一個(gè)模糊的基礎(chǔ)讓你知道怎么回事而已,但是這帖子有一些可取的地方我們稍后再說(shuō)。

這個(gè)是 HarmonyOS 的官方開(kāi)發(fā)文檔,里面有介紹怎么啟用相機(jī)拍照,錄視頻。

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-camera-guidelines-0000000000031782

這個(gè)文檔最大的作用就是告訴你怎么操作攝像頭,但是對(duì)于掃碼,只字未提。

這個(gè)基本沒(méi)用,只有碼生成而沒(méi)有解析,差評(píng)。

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ai-code-genration-overview-0000001051062161

這個(gè)帖子是 javaAPI 的使用手冊(cè),同樣只有碼生成而沒(méi)有解析,還是差評(píng)。

https://developer.harmonyos.com/cn/docs/documentation/doc-references/ibarcodedetector-0000001054120097

翻了一堆的帖子,我就納悶了,二維碼掃描這東西都出來(lái)這么多年了,技術(shù)上有啥難題嗎,怎么全網(wǎng)都沒(méi)有在弄的。

要知道,微信小程序里面可是直接自帶掃碼接口的呀!既然沒(méi)有,就到了咱顯一顯身手的時(shí)候了,哈哈!

技術(shù)思路

其實(shí)思路基本沒(méi)啥,咱們?nèi)粘I钪信龅綊呙锜o(wú)非是三種:

攝像頭掃碼

圖片直接解

在微信上比較常見(jiàn)的長(zhǎng)按某張圖片幫你掃碼,其實(shí)就是圖片掃碼一樣的

這里咱們著重處理攝像頭掃碼,因?yàn)閳D片掃描是攝像頭掃碼后面那部分,就是你攝像頭已經(jīng)取得圖片了,然后再解析掃碼。

可以這樣說(shuō):如果你學(xué)會(huì)了攝像頭掃碼,那么圖片解析二維碼你自動(dòng)就會(huì)了,怎么樣,是不是很心動(dòng),快跟我學(xué)起來(lái)吧!

原理:啟用手機(jī)攝像頭→攝像頭預(yù)覽→對(duì)準(zhǔn)二維碼→解析攝像頭數(shù)據(jù)→保存成圖片→發(fā)給二維碼解析庫(kù)解析→獲取解析結(jié)果。

開(kāi)工

①打開(kāi)你的手機(jī)攝像頭

攝像頭的啟用,怎么拍圖片在這篇官方文檔上講的很清楚了:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-camera-guidelines-0000000000031782
而且文檔下面還有一個(gè) gitee 倉(cāng)庫(kù)給你看源碼,這塊我尋思不用多講吧:
https://gitee.com/harmonyos/harmonyos_app_samples/tree/master/media/Camera

請(qǐng)首先順利得能讓你的手機(jī)拍一張照片出來(lái),提示,此處有坑:真機(jī)調(diào)試時(shí)需要在手機(jī)權(quán)限里手動(dòng)把攝像頭權(quán)限打開(kāi),否則你得到的是一個(gè)黑屏。

這個(gè)問(wèn)題折騰了我半個(gè)小時(shí),我以為在代碼里面加了權(quán)限,而手機(jī)也沒(méi)有彈出權(quán)限提示框就以為權(quán)限是正常的,結(jié)果進(jìn)到設(shè)置一看尼瑪禁的死死的。

②把官方代碼的圖片保存函數(shù)替換掉

其實(shí)就是這個(gè)函數(shù):

privatevoidsaveImage(ImageReceiverreceiver)

怎么改呢?咱有參考,還記得上面提到的官方 codelabs 嗎?對(duì)就是他:

https://developer.huawei.com/consumer/cn/codelabsPortal/carddetails/HarmonyOS-QRCode

2de0b76e-5dd0-11ec-b2e9-dac502259ad0.png

這地方有怎么把你拍到的圖片轉(zhuǎn)換成 Pixel 像素圖。

③上大招:zxing 閃亮登場(chǎng)

以下為心路歷程:在官方的那個(gè) codelabs 里面,最后一句話他說(shuō):—-結(jié)束。

what?怎么就結(jié)束了?當(dāng)時(shí)給我看的那叫懵啊,不過(guò)好在咱有邏輯思維分析能力,往上翻,上一篇叫二維碼識(shí)別,好,看吧:

2e120788-5dd0-11ec-b2e9-dac502259ad0.png

哦哦,引入一下這三個(gè)文件是吧,簡(jiǎn)單,我找一下哈…

請(qǐng)問(wèn)文件在哪?唉不整了,玩?zhèn)€游戲先...打了會(huì)游戲,又覺(jué)無(wú)聊,唉,還是學(xué)習(xí)吧,誰(shuí)叫咱熱愛(ài)學(xué)習(xí)呢?

幾經(jīng)搜索,給我找到了一個(gè)叫做 zxing 的庫(kù),這個(gè)庫(kù)著實(shí)強(qiáng)大,谷歌官方維護(hù)的,翻譯一下這就叫驚喜,二話不多整活了。

下載 zxing 庫(kù):官方網(wǎng)址如下,最新版是 3.4.1,直接下載過(guò)來(lái)。

https://github.com/zxing/zxing

打開(kāi)來(lái)一看,都是啥:

2e4d865a-5dd0-11ec-b2e9-dac502259ad0.png

這里面東西不少,但憑著咱技術(shù)人的直覺(jué),自己只需要里面的 core,但是要怎么使用呢?官方 readme 上面有一句話:

2e939e6a-5dd0-11ec-b2e9-dac502259ad0.png

那咱打開(kāi)吧:

https://github.com/zxing/zxing/wiki/Getting-Started-Developing

這里面有一句話引發(fā)了我的思考:

2ece1b62-5dd0-11ec-b2e9-dac502259ad0.png

對(duì),說(shuō)到心坎里了,我只要一個(gè) jar 包。合著前面的下載白弄了…

其實(shí)有更好的方式:根據(jù)自己的悟性領(lǐng)悟了,Maven 轉(zhuǎn) gradle 的方式,直接在項(xiàng)目 build.gradle 里面加一句。

2efb867e-5dd0-11ec-b2e9-dac502259ad0.png

改完這個(gè)文件,ide 提示你要同步一下,點(diǎn)擊同步,這時(shí)候 zxing-core 就集成到你的項(xiàng)目中了,方便。

2f2e72dc-5dd0-11ec-b2e9-dac502259ad0.png

集成,集成:這塊我直接貼代碼吧,講起來(lái)有點(diǎn)啰嗦。

privatevoidsaveImage(ImageReceiverreceiver){

HiLog.info(LABEL_LOG,"==>saveImage");
ohos.media.image.Imageimage=receiver.readNextImage();
ohos.media.image.Image.Componentcomponent=image.getComponent(ImageFormat.ComponentType.JPEG);
byte[]jpgbytes=newbyte[component.remaining()];
component.read(jpgbytes);
HiLog.info(LABEL_LOG,"....==>saveImage:%{public}d",jpgbytes.length);

ImageSource.SourceOptionssourceOptions=newImageSource.SourceOptions();
sourceOptions.formatHint="image/jpg";
ImageSourceimageSource=ImageSource.create(jpgbytes,sourceOptions);
PixelMappixelMap=imageSource.createPixelmap(null);

intwidth=pixelMap.getImageInfo().size.width;
intheight=pixelMap.getImageInfo().size.height;

int[]pis=newint[width*height];


HiLog.info(LABEL_LOG,"pixnumberbyte%{public}d,size==>%{public}s"+
"w%{public}dh%{public}d",
pixelMap.getPixelBytesNumber(),
pixelMap.getBytesNumberPerRow(),
width,height);

try{

pixelMap.readPixels(pis,0,width,newRect(0,0,width,height));
}catch(Exceptione){
HiLog.error(LABEL_LOG,"readPixelserror:%{public}s",e.toString());
return;

}

RGBLuminanceSourcergbSource=newRGBLuminanceSource(
pixelMap.getImageInfo().size.width,pixelMap.getImageInfo().size.height,pis);


HiLog.info(LABEL_LOG,"source:%{public}s",rgbSource.toString());

LuminanceSourcesource=rgbSource.crop(0,0,rgbSource.getWidth(),rgbSource.getHeight());

BinaryBitmapbMap=newBinaryBitmap(newHybridBinarizer(source));

finalMaphints=newHashMap<>();
hints.put(DecodeHintType.CHARACTER_SET,"utf-8");
hints.put(DecodeHintType.POSSIBLE_FORMATS,BarcodeFormat.QR_CODE);
hints.put(DecodeHintType.TRY_HARDER,Boolean.TRUE);

QRCodeReaderreader=newQRCodeReader();

Resultresult=null;
try{
result=reader.decode(bMap,hints);
HiLog.info(LABEL_LOG,"==>result:"+result.toString());
showTips(this.getContext(),result.toString());
}catch(NotFoundExceptione){
HiLog.info(LABEL_LOG,"notfound:"+e.toString());
}catch(Exceptione){
HiLog.error(LABEL_LOG,"catchException:"+e.toString());
}


}

短短的 60 行左右就搞定了(實(shí)際上折騰了 5Hour+),前面一直到第 13 行大家都能看懂,就是轉(zhuǎn)換 Pixel 圖片,不懂的同學(xué)往上翻去復(fù)習(xí)哈。 后面就是把像素取出來(lái),傳給 zxing 去解析,核心代碼在 QRcode.decode() 這里,前面的都是輔料。

打完收工:到這里我 java 版本的二維碼識(shí)別掃描就初步完成了,大家可以行測(cè)試了。

總結(jié)

是不是感覺(jué)挺簡(jiǎn)單的,說(shuō)來(lái)也是奇怪,這么簡(jiǎn)單的東西為啥就是沒(méi)人做呢?借星光計(jì)劃給大家發(fā)第一篇文章,一起期待下一篇吧!

原文標(biāo)題:60行代碼搞定鴻蒙“二維碼掃描”功能!

文章出處:【微信公眾號(hào):HarmonyOS技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2989

    瀏覽量

    109636
  • 攝像頭
    +關(guān)注

    關(guān)注

    61

    文章

    4980

    瀏覽量

    98367
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2620

    瀏覽量

    44044

原文標(biāo)題:60行代碼搞定鴻蒙“二維碼掃描”功能!

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Labview調(diào)用Halcon識(shí)別二維碼

    Labview調(diào)用Halcon識(shí)別二維碼 可一次識(shí)別多個(gè)二維碼 使用Labview 2020編輯,halcon的版本是 19.11,32位
    發(fā)表于 02-21 16:31

    基于STM32的二維碼識(shí)別源碼+二維碼解碼庫(kù)lib

    基于STM32的二維碼識(shí)別源碼+二維碼解碼庫(kù)lib,推薦下載!
    發(fā)表于 05-28 22:04

    分享一款二維碼掃描軟件

    【芝麻客】二維碼掃描軟件下載功能詳細(xì)介紹 如果你已經(jīng)下載了芝麻客二維碼掃描軟件你可以跳過(guò)以下環(huán)節(jié),假如你的手機(jī)已經(jīng)安裝了二維碼
    發(fā)表于 11-13 14:36

    二維碼識(shí)別

    `利用筆記本電腦的攝像頭采集二維碼圖像并識(shí)別,顯示二維碼的信息!下載了labview視覺(jué)與運(yùn)動(dòng)模塊的可以下來(lái)看看!里面有2張二維碼,用二維碼
    發(fā)表于 08-27 16:52

    掃描器識(shí)別二維碼

    掃描器識(shí)別二維碼
    發(fā)表于 02-23 20:55

    OpenHarmony應(yīng)用實(shí)現(xiàn)二維碼識(shí)別

    本文轉(zhuǎn)載自《OpenHarmony應(yīng)用實(shí)現(xiàn)二維碼識(shí)別》,作者zhushangyuan_ 概念介紹 二維碼的應(yīng)用場(chǎng)景非常廣泛,在購(gòu)物應(yīng)用中,消費(fèi)者可以直接
    發(fā)表于 08-23 17:00

    NLS-EM25二維碼掃描模組形象,二維掃描模組適合哪些場(chǎng)所應(yīng)用

    比如自助設(shè)備也能通過(guò)運(yùn)用二維碼技術(shù)實(shí)現(xiàn)掃支付的功能,這是因?yàn)榍度肓藯l碼識(shí)讀引擎、二維碼讀頭、二維碼掃描模塊等
    的頭像 發(fā)表于 12-04 15:19 ?2713次閱讀

    讀取二維碼掃描設(shè)備有哪些類(lèi)型

    讀取二維碼掃描設(shè)備的幾種類(lèi)型中比較簡(jiǎn)單、常用的便是收銀用條碼掃描槍?zhuān)虼怂脖环Q(chēng)為二維碼設(shè)備/二維碼讀取設(shè)備/
    發(fā)表于 07-06 10:09 ?4670次閱讀

    LV版本二維碼生成及源碼分享

    LV版本二維碼生成及源碼分享。
    發(fā)表于 04-11 15:06 ?0次下載

    二維碼讀頭有什么功能?如何選擇二維碼讀頭?

    二維碼讀頭有什么功能?如何選擇二維碼讀頭?二維碼讀頭可以將二維條碼圖像通過(guò)感光頭讀取、
    的頭像 發(fā)表于 03-30 15:03 ?2254次閱讀
    <b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>讀頭有什么功能?如何選擇<b class='flag-5'>二維碼</b>讀頭?

    如何選購(gòu)到性價(jià)比更高的二維碼識(shí)別掃描器?

    當(dāng)今社會(huì),越來(lái)越多的行業(yè)領(lǐng)域里都需要使用到二維碼識(shí)別掃描器,比如應(yīng)用在門(mén)禁安防領(lǐng)域的嵌入式二維碼識(shí)讀器用于讀取手機(jī)中的門(mén)禁二維碼或智慧門(mén)禁通
    的頭像 發(fā)表于 07-04 15:27 ?1294次閱讀
    如何選購(gòu)到性價(jià)比更高的<b class='flag-5'>二維碼</b><b class='flag-5'>識(shí)別</b><b class='flag-5'>掃描</b>器?

    二維碼掃描模塊多少錢(qián)一臺(tái)?二維掃描模組價(jià)格?

    服務(wù)設(shè)備如自動(dòng)售賣(mài)、點(diǎn)餐機(jī)等內(nèi)嵌式使用的嵌入式掃平臺(tái)。在這個(gè)數(shù)字化時(shí)代,許多企業(yè)和集成商客戶在自動(dòng)識(shí)別技術(shù)領(lǐng)域中都會(huì)考慮采購(gòu)二維碼掃描模塊,但是大家普遍關(guān)心的問(wèn)題
    的頭像 發(fā)表于 07-13 16:05 ?1546次閱讀
    <b class='flag-5'>二維碼</b><b class='flag-5'>掃描</b>模塊多少錢(qián)一臺(tái)?<b class='flag-5'>二維</b><b class='flag-5'>掃描</b>模組價(jià)格?

    遠(yuǎn)距離二維碼掃描器如何選擇?看看以下三款遠(yuǎn)距離二維碼模塊

    隨著二維碼相關(guān)技術(shù)及硬件的普及與低成本化,二維條碼掃描設(shè)備的應(yīng)用被人們廣為熟知,應(yīng)用的行業(yè)也眾多。然而,在某些場(chǎng)景中,由于需要遠(yuǎn)距離掃描二維碼
    的頭像 發(fā)表于 03-21 15:41 ?1203次閱讀
    遠(yuǎn)距離<b class='flag-5'>二維碼</b><b class='flag-5'>掃描</b>器如何選擇?看看以下三款遠(yuǎn)距離<b class='flag-5'>二維碼</b>掃<b class='flag-5'>碼</b>模塊

    快速將二維碼掃描識(shí)別模組嵌入集成到安卓一體機(jī)上使用

    在現(xiàn)代科技快速發(fā)展的今天,二維碼掃描模組的應(yīng)用已深入到各個(gè)行業(yè)領(lǐng)域。特別是在安卓一體機(jī)中,二維碼掃描模組已成為其不可或缺的一部分。本文將詳細(xì)介紹如何在安卓一體機(jī)上安裝
    的頭像 發(fā)表于 02-28 15:59 ?481次閱讀
    快速將<b class='flag-5'>二維碼</b><b class='flag-5'>掃描</b><b class='flag-5'>識(shí)別</b>模組嵌入集成到安卓一體機(jī)上使用

    基于LockAI視覺(jué)識(shí)別模塊:C++二維碼識(shí)別

    二維碼識(shí)別是視覺(jué)模塊經(jīng)常使用到的功能之一。我們將演示如何使用基于瑞芯微RV1106的LockAI視覺(jué)識(shí)別模塊進(jìn)行二維碼
    的頭像 發(fā)表于 05-26 09:42 ?277次閱讀
    基于LockAI視覺(jué)<b class='flag-5'>識(shí)別</b>模塊:C++<b class='flag-5'>二維碼</b><b class='flag-5'>識(shí)別</b>