国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(文檔檢測(cè)校正)

這篇具有很好參考價(jià)值的文章主要介紹了HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(文檔檢測(cè)校正)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

基本概念

文檔校正提供了文檔翻拍過程的輔助增強(qiáng)功能,包含兩個(gè)子功能:

  • 文檔檢測(cè):能夠自動(dòng)識(shí)別圖片中的文檔,返回文檔在原圖中的位置信息。這里的文檔泛指外形方正的事物,比如書本、相片、畫框等。
  • 文檔校正:能根據(jù)文檔在原始圖片中的位置信息校正文檔的拍攝角度,自動(dòng)將拍攝視角調(diào)整到正對(duì)文檔的角度上。

運(yùn)作機(jī)制

  • 文檔檢測(cè)

    調(diào)用文檔檢測(cè)接口,識(shí)別圖片中的文檔,返回文檔在原圖中的位置信息。

    圖1?含有文檔的圖片

HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(文檔檢測(cè)校正)

?如上圖中的紅點(diǎn)所示,文檔檢測(cè)接口返回了圖中相片文檔四個(gè)頂點(diǎn)相對(duì)圖像左上角的坐標(biāo)信息。文檔檢測(cè)結(jié)果如下:

{
  "resultCode":0,
  "doc":
     "{
       \"bottom_left\":{\"x\":17,\"y\":440},
       \"bottom_right\":{\"x\":589,\"y\":760},
       \"top_left\":{\"x\":256,\"y\":13},
       \"top_right\":{\"x\":829,\"y\":332}
    }"
}

  • 該JSON保存了原圖中相片文檔四個(gè)角相對(duì)原圖左上頂點(diǎn)的坐標(biāo)信息(單位:像素),其中resultCode為返回碼。

  • 文檔校正

    根據(jù)文檔在原始圖片中的位置信息校正文檔的拍攝角度(可自定義校正的區(qū)域)。

    圖2?圖片中的校正區(qū)域

HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(文檔檢測(cè)校正)

校正上圖中深藍(lán)色矩形(文檔檢測(cè)接口返回的文檔區(qū)域)區(qū)域,校正后的效果如下圖:

圖3?校正完成的文檔圖片

HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(文檔檢測(cè)校正)

約束與限制

  • 支持處理的圖片格式包括JPEG、JPG、PNG,最終輸出的圖片僅支持JPEG格式。
  • 拍攝時(shí)盡量將文檔放置在與文檔背景色有一定色差的平面上,并盡量讓文檔充滿畫面,保持文檔邊界入鏡,以獲得最佳效果。
  • 輸入圖片高和寬最小為100像素,最大為10000像素。

文檔檢測(cè)校正開發(fā)

場(chǎng)景介紹

  • 將紙質(zhì)信件等舊文檔翻拍成電子版,幫助改善舊文檔的翻拍效果。
  • 記錄書畫展覽中的精彩作品,幫助將作品拍攝得更加端正。

接口說明

文檔校正提供了setVisionConfiguration()、docDetect()和docRefine()三個(gè)函數(shù)接口。

  • setVisionConfiguration是IDocRefine接口的成員。通過傳入的DocRefineConfiguration,選擇需要調(diào)用的文檔校正類型。
void setVisionConfiguration(DocRefineConfiguration docRefineConfiguration);
  • 下表列出了DocRefineConfiguration的常用設(shè)置:

    接口

    參數(shù)名

    類型

    參數(shù)說明

    setProcessMode()

    mode

    int

    進(jìn)程模式定義:

    VisionConfiguration.MODE_IN(同進(jìn)程調(diào)用)

    VisionConfiguration.MODE_OUT(跨進(jìn)程調(diào)用)

    默認(rèn)值為VisionConfiguration.MODE_OUT。

  • 調(diào)用IDocRefine的docDetect()方法,獲取檢測(cè)結(jié)果。
int docDetect(VisionImage image, DocCoordinates result, VisionCallback<DocCoordinates> visionCallBack);

其中:

image為待文檔檢測(cè)的輸入圖片。

如果visionCallback為null,執(zhí)行同步調(diào)用,結(jié)果碼由方法返回,檢測(cè)結(jié)果由result返回。

如果visionCallback為有效的回調(diào)函數(shù),則該函數(shù)為異步調(diào)用,函數(shù)返回時(shí)result中的值無效,實(shí)際識(shí)別結(jié)果由回調(diào)函數(shù)返回。

同步模式調(diào)用成功時(shí),該函數(shù)返回結(jié)果碼0。異步模式調(diào)用請(qǐng)求發(fā)送成功時(shí),該函數(shù)返回結(jié)果碼700。

  • 調(diào)用IDocRefine的docRefine()方法,獲取校正結(jié)果。
int docRefine(VisionImage image, DocCoordinates coordinates, ImageResult result,
    VisionCallback<ImageResult> visionCallBack);

其中:

image為待文檔校正的輸入圖片。

如果visionCallback為null,執(zhí)行同步調(diào)用,結(jié)果碼由方法返回,校正結(jié)果由result中返回。

如果visionCallback為有效的回調(diào)函數(shù),則該函數(shù)為異步調(diào)用,函數(shù)返回時(shí)result中的值無效,實(shí)際識(shí)別結(jié)果由回調(diào)函數(shù)返回。

同步模式調(diào)用成功時(shí),該函數(shù)返回結(jié)果碼0。異步模式調(diào)用請(qǐng)求發(fā)送成功時(shí),該函數(shù)返回結(jié)果碼700。

開發(fā)步驟

在使用文檔校正時(shí),先將相關(guān)的類添加至工程。

import ohos.ai.cv.common.ConnectionCallback;
import ohos.ai.cv.common.VisionCallback;
import ohos.ai.cv.common.VisionImage;
import ohos.ai.cv.common.VisionManager;
import ohos.ai.cv.common.ImageResult;
import ohos.ai.cv.docrefine.DocCoordinates;
import ohos.ai.cv.docrefine.DocRefineConfiguration;
import ohos.ai.cv.docrefine.IDocRefine;
import ohos.app.Context;
import ohos.media.image.PixelMap;

定義ConnectionCallback回調(diào),實(shí)現(xiàn)連接能力引擎成功與否后的操作。

ConnectionCallback connectionCallback = new ConnectionCallback() {
    @Override
    public void onServiceConnect() {
        // 定義連接能力引擎成功后的操作。
    }

    @Override
    public void onServiceDisconnect() {
        // 定義連接能力引擎失敗后的操作。
    }
};

調(diào)用VisionManager.init()方法,將此工程的context和已經(jīng)定義的connectionCallback 作為入?yún)?,建立與能力引擎的連接,context應(yīng)為ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的實(shí)例或子類實(shí)例。

int result = VisionManager.init(context, connectionCallback);

在收到onServiceConnect回調(diào)連接服務(wù)成功后,實(shí)例化IDocRefine接口,將此工程的context作為入?yún)?,context應(yīng)為ohos.aafwk.ability.Ability或ohos.aafwk.ability.AbilitySlice的實(shí)例或子類實(shí)例。

IDocRefine docRefine = VisionManager.getDocRefine(context);

實(shí)例化VisionImage對(duì)象image,并傳入待校正圖片pixelMap。

VisionImage image = VisionImage.fromPixelMap(pixelMap);

實(shí)例化DocCoordinates對(duì)象docCoordinates。

DocCoordinates docCoordinates = new DocCoordinates();

說明

該類在同步模式下用于存放檢測(cè)接口docDetect()傳出的文檔位置結(jié)果。

(可選)定義VisionCallback<DocCoordinates>回調(diào)。

VisionCallback<DocCoordinates> callback= new VisionCallback<DocCoordinates>() {
    @Override
    public void onResult(DocCoordinates docCoordinates) {
        // 對(duì)正確獲得的結(jié)果進(jìn)行處理。
    }
    @Override
    public void onError(int i) {
        // 處理錯(cuò)誤返回碼。
    }
    @Override
    public void onProcessing(float v) {
        // 返回處理進(jìn)度。
    }
};

說明

在異步模式下,該類的onResult()方法用于獲得檢測(cè)的結(jié)果docCoordinates(內(nèi)含檢測(cè)到的文檔坐標(biāo));onError()方法用于處理錯(cuò)誤返回碼;onProcessing()方法用于返回處理進(jìn)度,目前沒有實(shí)現(xiàn)此接口的功能。

同步與異步模式區(qū)別在于docDetect()的最后一個(gè)參數(shù)visionCallback是否為空。若非空則為異步模式,此時(shí)會(huì)忽略自定義的DocCoordinates輸入docCoordinates,接口調(diào)用結(jié)果一律從回調(diào)函數(shù)visionCallback獲得。

實(shí)例化ImageResult對(duì)象imageResult。

ImageResult imageResult = new ImageResult();

說明

該類在同步模式下用于存放校正docRefine()方法傳出的圖片結(jié)果。

(可選)定義VisionCallback<ImageResult>回調(diào)。

VisionCallback<ImageResult> callback = new VisionCallback<ImageResult>() {
    @Override
    public void onResult(ImageResult imageResult) {
        // 對(duì)正確獲得的結(jié)果進(jìn)行處理。
    }
    @Override
    public void onError(int i) {
        // 處理錯(cuò)誤返回碼。
    }
    @Override
    public void onProcessing(float v) {
        // 返回處理進(jìn)度。
    }
};

說明

  • 在異步模式下,該類的onResult()方法用于獲得校正的結(jié)果imageResult(內(nèi)含校正后的圖片);onError()方法用于處理錯(cuò)誤返回碼;onProcessing()方法用于返回處理進(jìn)度,目前沒有實(shí)現(xiàn)此接口的功能。
  • 同步與異步模式區(qū)別在于docRefine()的最后一個(gè)參數(shù)visionCallback是否為空。若非空則為異步模式。此時(shí)會(huì)忽略自定義的ImageResult輸入imageResult,接口調(diào)用結(jié)果一律從回調(diào)類visionCallback獲得。

通過DocRefineConfiguration配置校正參數(shù),可選擇進(jìn)程調(diào)用模式等(推薦使用MODE_IN同進(jìn)程模式),跨進(jìn)程模式(MODE_OUT)下調(diào)用方與能力引擎處于不同進(jìn)程;同進(jìn)程模式(MODE_IN)下,能力引擎在調(diào)用方進(jìn)程中實(shí)例化,調(diào)用方通過反射的方式調(diào)用引擎里的文檔校正能力。以同進(jìn)程調(diào)用為例:

DocRefineConfiguration.Builder builder = new DocRefineConfiguration.Builder();
builder.setProcessMode(VisionConfiguration.MODE_IN);
DocRefineConfiguration configuration = builder.build();
docRefine.setVisionConfiguration(configuration);

(可選)調(diào)用IDocRefine的prepare()方法。

result = docRefine.prepare();
說明
如果返回的result不為0,說明當(dāng)前文檔校正能力準(zhǔn)備失敗,需要處理錯(cuò)誤,不再執(zhí)行以后的動(dòng)作。在docDetect()和docRefine()方法中會(huì)首先調(diào)用prepare()啟動(dòng)引擎,如果引擎已經(jīng)啟動(dòng)則不會(huì)再次啟動(dòng)。

調(diào)用IDocRefine的docDetect()方法:

result = docRefine.docDetect(image, docCoordinates, null); // 同步

或者

result = docRefine.docDetect(image, null, callback); // 異步

說明

  • 同步模式調(diào)用完成時(shí),該函數(shù)立即返回結(jié)果碼。
  • 異步模式調(diào)用請(qǐng)求發(fā)送成功時(shí),該函數(shù)返回結(jié)果碼700。如果返回其他的值,說明異步調(diào)用請(qǐng)求不成功,需要先處理錯(cuò)誤,回調(diào)函數(shù)不會(huì)被調(diào)用。
  • 如果異步模式調(diào)用請(qǐng)求發(fā)送成功,則檢測(cè)完成后,相應(yīng)的回調(diào)函數(shù)會(huì)被自動(dòng)調(diào)用。
    • 如果onResult()回調(diào)被調(diào)用,說明檢測(cè)成功,相當(dāng)于同步模式結(jié)果碼為0的情況。
    • 如果onError()方法被調(diào)用,說明檢測(cè)發(fā)生了錯(cuò)誤,具體的調(diào)用結(jié)果碼將由onError()的參數(shù)接收。

結(jié)果碼定義如下表:

結(jié)果碼

說明

0

成功

-1

未知錯(cuò)誤

-2

不支持的功能或接口

-3

內(nèi)存分配失敗或創(chuàng)建對(duì)象失敗

-4

所需庫加載失敗

-10

引擎開關(guān)已經(jīng)關(guān)閉

101

失敗

102

超時(shí)

200

輸入?yún)?shù)不合法(圖片尺寸錯(cuò)誤)

201

輸入?yún)?shù)不合法(為空)

210

輸入?yún)?shù)合法

500

服務(wù)綁定異常

521

服務(wù)綁定異常斷開

522

服務(wù)已連接

600

模型文件異常

601

模型文件不存在

602

模型加載失敗

700

異步調(diào)用請(qǐng)求發(fā)送成功

1001

神經(jīng)網(wǎng)絡(luò)處理單元錯(cuò)誤

調(diào)用IDocRefine的docRefine()方法:

result = docRefine.docRefine(image, docCoordinates, imageResult, null); // 同步

或者

result = docRefine.docRefine(image, docCoordinates, null, callback); // 異步

說明

  • 同步模式調(diào)用完成時(shí),該函數(shù)立即返回結(jié)果碼。
  • 異步模式調(diào)用請(qǐng)求發(fā)送成功時(shí),該函數(shù)返回結(jié)果碼700。如果返回其他的值,說明異步調(diào)用請(qǐng)求不成功,需要先處理錯(cuò)誤,回調(diào)函數(shù)不會(huì)被調(diào)用。
  • 如果異步模式調(diào)用請(qǐng)求發(fā)送成功,則校正完成后,相應(yīng)的回調(diào)函數(shù)會(huì)被自動(dòng)調(diào)用。
    • 如果onResult()回調(diào)被調(diào)用,說明校正成功,相當(dāng)于同步模式結(jié)果碼為0的情況。
    • 如果onError()方法被調(diào)用,說明校正發(fā)生了錯(cuò)誤,具體的調(diào)用結(jié)果碼將由onError()的參數(shù)接收。

結(jié)果碼定義如下表:

結(jié)果碼

說明

0

成功

-1

未知錯(cuò)誤

-2

不支持的功能或接口

-3

內(nèi)存分配失敗或創(chuàng)建對(duì)象失敗

-4

所需庫加載失敗

-10

引擎開關(guān)已經(jīng)關(guān)閉

101

失敗

102

超時(shí)

200

輸入?yún)?shù)不合法(圖片尺寸錯(cuò)誤)

201

輸入?yún)?shù)不合法(為空)

210

輸入?yún)?shù)合法

500

服務(wù)綁定異常

521

服務(wù)綁定異常斷開

522

服務(wù)已連接

600

模型文件異常

601

模型文件不存在

602

模型加載失敗

700

異步調(diào)用請(qǐng)求發(fā)送成功

1001

神經(jīng)網(wǎng)絡(luò)處理單元錯(cuò)誤

調(diào)用IDocRefine的release()方法,釋放資源。調(diào)用pixelMap的release()方法,釋放圖片內(nèi)存。

result = docRefine.release();
if (pixelMap != null) {
    pixelMap.release();
    pixelMap = null;
}

說明

不再使用文檔校正能力時(shí),調(diào)用release()方法釋放資源。

調(diào)用VisionManager.destroy()方法,斷開與能力引擎的連接。文章來源地址http://www.zghlxwxcb.cn/news/detail-502554.html

VisionManager.destroy();

到了這里,關(guān)于HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(文檔檢測(cè)校正)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(圖像超分辨率)

    針對(duì)圖片分辨率不足的問題,傳統(tǒng)的解決方案是使用雙線性或雙三次插值的方法來放大圖像;而針對(duì)圖片壓縮噪聲的問題,傳統(tǒng)的解決方案則是通過各種算法實(shí)現(xiàn)平滑、去噪。 本SDK使用智能的方法,基于深度神經(jīng)網(wǎng)絡(luò),依托硬件的神經(jīng)網(wǎng)絡(luò)加速器,提供適用于移動(dòng)終端的1x和

    2024年02月11日
    瀏覽(96)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—AI功能開發(fā)(二維碼生成及文字識(shí)別)

    為應(yīng)用提供豐富的AI(Artificial Intelligence)能力,支持開箱即用。開發(fā)者可以靈活、便捷地選擇AI能力,讓應(yīng)用變得更加智能。 已開放的AI能力如下表所示: 能力 簡介 二維碼生成 根據(jù)開發(fā)者給定的字符串信息和二維碼圖片尺寸,返回相應(yīng)的二維碼圖片字節(jié)流。調(diào)用方可以通過

    2024年02月11日
    瀏覽(29)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—流轉(zhuǎn)

    HarmonyOS學(xué)習(xí)路之開發(fā)篇—流轉(zhuǎn)

    隨著全場(chǎng)景多設(shè)備生活方式的不斷深入,用戶擁有的設(shè)備越來越多,每個(gè)設(shè)備都能在適合的場(chǎng)景下提供良好的體驗(yàn),例如:手表可以提供及時(shí)的信息查看能力,電視可以帶來沉浸的觀影體驗(yàn)。但是,每個(gè)設(shè)備也有使用場(chǎng)景的局限,例如:在電視上輸入文本相對(duì)手機(jī)來說是非常

    2024年02月15日
    瀏覽(95)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—設(shè)備管理(位置開發(fā))

    移動(dòng)終端設(shè)備已經(jīng)深入人們?nèi)粘I畹姆椒矫婷妫绮榭此诔鞘械奶鞖?、新聞?shì)W事、出行打車、旅行導(dǎo)航、運(yùn)動(dòng)記錄。這些習(xí)以為常的活動(dòng),都離不開定位用戶終端設(shè)備的位置。 當(dāng)用戶處于這些豐富的使用場(chǎng)景中時(shí),系統(tǒng)的位置能力可以提供實(shí)時(shí)準(zhǔn)確的位置數(shù)據(jù)。對(duì)于開發(fā)

    2024年02月16日
    瀏覽(83)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—多媒體開發(fā)(相機(jī)開發(fā) 一)

    HarmonyOS學(xué)習(xí)路之開發(fā)篇—多媒體開發(fā)(相機(jī)開發(fā) 一)

    HarmonyOS相機(jī)模塊支持相機(jī)業(yè)務(wù)的開發(fā),開發(fā)者可以通過已開放的接口實(shí)現(xiàn)相機(jī)硬件的訪問、操作和新功能開發(fā),最常見的操作如:預(yù)覽、拍照、連拍和錄像等。 相機(jī)靜態(tài)能力 用于描述相機(jī)的固有能力的一系列參數(shù),比如朝向、支持的分辨率等信息。 物理相機(jī) 物理相機(jī)就是獨(dú)

    2024年02月10日
    瀏覽(91)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—多媒體開發(fā)(相機(jī)開發(fā) 二)

    Camera操作類,包括相機(jī)預(yù)覽、錄像、拍照等功能接口。 接口名 描述 triggerSingleCapture?(FrameConfig frameConfig) 啟動(dòng)相機(jī)幀的單幀捕獲。 triggerMultiCapture?(ListFrameConfig frameConfigs) 啟動(dòng)相機(jī)幀的多幀捕獲。 configure?(CameraConfig config) 配置相機(jī)。 flushCaptures?() 停止并清除相機(jī)幀的捕獲

    2024年02月11日
    瀏覽(91)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—多媒體開發(fā)(圖像開發(fā) 二)

    圖像編碼就是將PixelMap圖像編碼成不同存檔格式圖片,用于后續(xù)其他處理,比如保存、傳輸?shù)?。?dāng)前僅支持JPEG格式。 ImagePacker主要用于圖像編碼。 接口名 描述 create() 創(chuàng)建圖像打包器實(shí)例。 initializePacking(byte[] data, PackingOptions opts) 初始化打包任務(wù),將字節(jié)數(shù)組設(shè)置為打包后輸

    2024年02月11日
    瀏覽(97)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—多媒體開發(fā)(圖像開發(fā) 一)

    HarmonyOS圖像模塊支持圖像業(yè)務(wù)的開發(fā),常見功能如圖像解碼、圖像編碼、基本的位圖操作、圖像編輯等。當(dāng)然,也支持通過接口組合來實(shí)現(xiàn)更復(fù)雜的圖像處理邏輯。 圖像解碼 圖像解碼就是不同的存檔格式圖片(如JPEG、PNG等)解碼為無壓縮的位圖格式,以方便在應(yīng)用或者系統(tǒng)

    2024年02月11日
    瀏覽(87)
  • HarmonyOS學(xué)習(xí)路之方舟開發(fā)框架—方舟開發(fā)框架(ArkUI)概述

    HarmonyOS學(xué)習(xí)路之方舟開發(fā)框架—方舟開發(fā)框架(ArkUI)概述

    方舟開發(fā)框架(簡稱ArkUI)為HarmonyOS應(yīng)用的UI開發(fā)提供了完整的基礎(chǔ)設(shè)施,包括簡潔的UI語法、豐富的UI功能(組件、布局、動(dòng)畫以及交互事件),以及實(shí)時(shí)界面預(yù)覽工具等,可以支持開發(fā)者進(jìn)行可視化界面開發(fā)。 UI: 即用戶界面。開發(fā)者可以將應(yīng)用的用戶界面設(shè)計(jì)為多個(gè)功能

    2024年02月16日
    瀏覽(96)
  • HarmonyOS學(xué)習(xí)路之開發(fā)篇—Java UI框架(動(dòng)畫開發(fā))

    HarmonyOS學(xué)習(xí)路之開發(fā)篇—Java UI框架(動(dòng)畫開發(fā))

    動(dòng)畫是組件的基礎(chǔ)特性之一,精心設(shè)計(jì)的動(dòng)畫使UI變化更直觀,有助于改進(jìn)應(yīng)用程序的外觀并改善用戶體驗(yàn)。Java UI框架提供了幀動(dòng)畫、數(shù)值動(dòng)畫和屬性動(dòng)畫,并提供了將多個(gè)動(dòng)畫同時(shí)操作的動(dòng)畫集合。 幀動(dòng)畫是利用視覺暫留現(xiàn)象,將一系列靜止的圖片按序播放,給用戶產(chǎn)生動(dòng)

    2024年02月09日
    瀏覽(87)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包