<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          瀏覽器中的圖像識別 API

          時間:?2017-12-29閱讀:?955標簽:?api

          前言

          在這幾年的前端發展中,Web 應用不斷朝著 Native APP 的體驗發展,比如在今年被談及最多的 PWA,就連 Apple 都逐漸在自家瀏覽器 safari 中集成 Service Worker。在各大瀏覽器廠商的支持下,Web 逐漸擁有了更多的能力,同時隨著硬件的一代代升級,前端應用中的體驗也在逐漸提升。

          然而很多時候,對于硬件底層的調用以及復雜運算上仍然需要 Native APP 的支持,在 Webview 環境中以 JSBridge 的形式提供給前端應用調用。這使得很許多前端應用只能依托于 Native APP 定制的 Webview。當然,瀏覽廠商也在不斷跟進,把許多底層的硬件接口和系統層面的接口直接提供給 Web 使用,比如 Web Bluetooth API 、Web Share API、Shape Detection API 等等。

          在本篇文章中,將介紹 Chrome 中集成的圖形識別 API (Shape Detection API)。


          圖形識別

          照片和圖像是互聯網構成中最大的部分,其中相當一部分包含了可識別的特征,比如人臉,二維碼或者文本。可想而之,識別這些特征的計算開銷非常大,但有些很有趣場景,比如在照片中自動標記人臉,或者根據圖像中的 URL 進行重定向。
          硬件廠商從很久以前就已經開始支持這些特性,但 Web 應用遲遲未能很好地利用上這些硬件特性,必須借助一些難用的程序庫才能達到目的。  

          由于圖像識別需要系統層面的資源與計算能力,因此只有原生的底層 API 能夠駕馭的住。在目前的 Web 應用中,涉及到圖像識別的功能時,一般是將圖片上傳至服務器或者在 Webview 中通過 JSBridge 傳給 Native APP ,在其計算出結果之后返回到 Web 中繼續處理。對于 Web 來說,其能力則顯得單薄,必須依托于服務端的處理或者是 JSBridge ,而如果對圖像的處理能夠成為 Web 的一個標準 API,那么其體驗將會得到很大程度的提升。

          在 Native 開發中,Android 和 IOS 平臺都在系統層面直接提供給了應用開發識別圖像的一些能力,比如對于二維碼/條形碼的識別,Android 可以使用 barcode API 、 iOS 可以使用 CIQRCodeFeature API 。

          而在 Web 應用中為何就不能有一套標準的 js API 來調用系統底層的能力呢?

          Chrome 團隊在 16 年就嘗試在瀏覽器中集成了直接提供給 Web 開發調用的 Shape Detection API 。目前圖形識別 API 在 WICG 中還處于孵化和實驗階段,如果想開啟該功能,需要下載 Canary 版本的 Chrome 瀏覽器( https://www.google.com/chrome/browser/canary.html),然后在地址欄輸入 chrome://flags/#enable-experimental-web-platform-features ,在 Experimental Web Platform features 這一項點擊 “啟用” 來開啟該實驗性的功能。

          接下來驗證一下瀏覽器是否支持了該 API ,在 Console 中輸入:

          window.FaceDetector
          window.BarcodeDetector
          window.TextDetector

          如果 LOG 出:

          ? FaceDetector() { [native code] }
          ? BarcodeDetector() { [native code] }
          ? TextDetector() { [native code] }

          則說明你已經可以在瀏覽器中調用 Shape Detection API 了。

          雖然目前來說該 API 還處于實驗階段(實驗階段的功能是不穩定的,其最終并不一定會正式集成),但是作為新時代的前端開發者,我們還是愿意嘗嘗鮮的。

          TIP:以下例子都需要下載 Canary 版本的 Chrome 瀏覽器,并且開啟 Experimental Web Platform features 實驗性功能。


          API 能力

          Shape Detection API 提供了三個接口可以調用:

          • FaceDetector: 人臉識別;
          • BarcodeDetector: 二維碼/條形碼 識別;
          • TextDetector: 文本識別;

          1. 人臉識別

          FaceDetector 是一個針對圖像中的人臉進行識別的底層加速平臺組件類,它接受一個配置參數 FaceDetectorOptions ,我們直接創造一個 FaceDetector 實例:

          const faceDetector = new FaceDetector({
          fastMode: true,
          maxDetectedFaces: 10
          });

          FaceDetectorOptions 中的參數:

          • fastMode: [Boolean] ,表示是否開啟速度優先(于精確度)模式,將通過更小的比例尺(更靠近目標圖形)或尋找更大的目標圖形的辦法進行識別;
          • maxDetectedFaces: [Number] ,當前場景中已識別的人臉數的最大值;

          FaceDetector 類有一個方法 detect ,接受一個圖片的 Image 或者 Blob 對象,用來檢測該圖片中的人臉,同時返回一個 Promise 對象:

          <!DOCTYPE html>
          <html lang="en">
          <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <meta http-equiv="X-UA-Compatible" content="ie=edge">
          <title>Shape Detection API Demo</title>
          <style>
          * {
          box-sizing: border-box;
          padding: 0;
          margin: 0;
          }
          </style>
          </head>
          <body>
          <img
          id="face-image"
          src="http://opsqe9du9.bkt.clouddn.com/1.jpeg" alt="image"
          crossorigin="anonymous"
          style="width: 100%;"
          />
          <script type="text/javascript">
          window.onload = main();
          function main () {
          const faceDetector = new FaceDetector({fastMode: true, maxDetectedFaces: 10});

          const image = document.getElementById('face-image');

          faceDetector.detect(image)
          .then(detectedFaces => {
          console.log(detectedFaces);
          })
          .catch((e) => {
          console.error("Face Detection failed, boo.", e);
          });
          }
          </script>
          </body>
          </html>

          以上例子中:在 HTML 中創建了一個 img 標簽(這里需要注意一點,如果圖片來自跨域,那么需要設置crossorigin="anonymous"),之后獲取到 Image 對象,調用 faceDetector.detect 來檢測圖片中的人臉,在識別成功后打印出 detectedFaces 得到:

          (5) [DetectedFace, DetectedFace, DetectedFace, DetectedFace, DetectedFace]
          0: DetectedFace
          boundingBox: DOMRect
          bottom: 275
          height: 44
          left: 710
          right: 754
          top: 231
          width: 44
          x: 710
          y: 231
          landmarks: Array(3)
          0:
          location: {x: 729, y: 246}
          type: "eye"
          1: {location: {…}, type: "eye"}
          2: {location: {…}, type: "mouth"}
          length: 3
          1: DetectedFace {boundingBox: DOMRect, landmarks: Array(3)}
          2: DetectedFace {boundingBox: DOMRect, landmarks: Array(3)}
          3: DetectedFace {boundingBox: DOMRect, landmarks: Array(3)}
          4: DetectedFace {boundingBox: DOMRect, landmarks: Array(3)}
          length: 5

          可以看到,這里識別到了 5 個人臉,返回了一個 length === 5 的數組,每個數組元素都是一個 DetectedFace 對象,包含了兩個屬性:

          • boundingBox: DOMRect 對象,包含了該識別區域的位置(bottom、top、left、right、x、y)、大小信息(width、height);
          • landmarks: 為一個數組,包含了其臉部的一些特性信息,比如眼睛(eye)、嘴巴(mouth),及其位置信息(x、y);

          完整 Demo: https://tongchengqiu.github.io/mixin-demo/demo-shape-detection/1.html

          2. 二維碼/條形碼識別

          BarcodeDetector 是一個針對圖像中的二維碼或條形碼進行識別的底層加速平臺組件類,我們直接創建其實例:

          const barcodeDetector = new BarcodeDetector();

          和 FaceDetector 一樣,使用 detect 函數來檢測圖片,該方法同樣接受一個圖片的 Image 或者 Blob 對象,同時返回一個 Promise 對象:

          <!DOCTYPE html>
          <html lang="en">
          <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <meta http-equiv="X-UA-Compatible" content="ie=edge">
          <title>Shape Detection API Demo</title>
          <style>
          * {
          box-sizing: border-box;
          padding: 0;
          margin: 0;
          }
          </style>
          </head>
          <body>

          <img id="qrcode-image" crossorigin="anonymous" src="http://opsqe9du9.bkt.clouddn.com/img-2.png" alt="QRCODE">

          <script type="text/javascript">
          window.onload = main;

          function main () {
          const barcodeDetector = new BarcodeDetector();

          const image = document.getElementById('qrcode-image');

          barcodeDetector.detect(image)
          .then(detectedCodes => {
          console.log(detectedCodes);
          })
          .catch((e) => {
          console.error("Barcode Detection failed, boo.", e);
          })
          }
          </script>
          </body>
          </html>

          和上述例子一樣,打印出檢測獲取到的 detectedCodes:

          [DetectedBarcode]
          0: DetectedBarcode
          boundingBox: DOMRect
          bottom: 375.4765348434448
          height: 362.06744384765625
          left: 9.409090042114258
          right: 371.47656440734863
          top: 13.409090995788574
          width: 362.0674743652344
          x: 9.409090042114258
          y: 13.409090995788574
          cornerPoints: Array(4)
          0: {x: 9.52997875213623, y: 13.529980659484863}
          1: {x: 370.59088134765625, y: 13.409090995788574}
          2: {x: 371.4765625, y: 375.4765319824219}
          3: {x: 9.409090042114258, y: 374.5908508300781}
          length: 4
          rawValue: "https://qiutc.me/"
          length: 1

          獲取到的數組中每個元素是一個識別到的二維碼的 DetectedBarcode 對象,包含了三個屬性:

          • DetectedBarcode: 二維碼的位置信息;
          • cornerPoints: 一串已識別條形碼的頂點序列;
          • rawValue: 該二維碼表示的真實值,是一個 String 值;

          完整 Demo: https://tongchengqiu.github.io/mixin-demo/demo-shape-detection/2.html

          3. 文字識別

          TextDetector 是一個針對圖像中的文本進行識別的底層加速平臺組件,我們直接創建其實例:

          const textDetector = new TextDetector();

          和 FaceDetector 一樣,使用 detect 函數來檢測圖片,該方法同樣接受一個圖片的 Image 或者 Blob 對象,同時返回一個 Promise 對象:

          <!DOCTYPE html>
          <html lang="en">
          <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <meta http-equiv="X-UA-Compatible" content="ie=edge">
          <title>Shape Detection API Demo</title>
          <style>
          * {
          box-sizing: border-box;
          padding: 0;
          margin: 0;
          }
          </style>
          </head>
          <body>
          <img id="text-image" crossorigin="anonymous" src="http://opsqe9du9.bkt.clouddn.com/img-3.png" alt="TEXT">
          <script type="text/javascript">
          window.onload = main;
          function main () {
          const textDetector = new TextDetector();
          const image = document.getElementById('text-image');
          textDetector.detect(image)
          .then(detectedTexts => {
          console.log(detectedTexts);
          })
          .catch((e) => {
          console.error("Text Detection failed, boo.", e);
          })
          }
          </script>
          </body>
          </html>

          和上述例子一樣,打印出檢測獲取到的 detectedTexts:

          (12) [DetectedText, DetectedText, DetectedText, DetectedText, DetectedText, DetectedText, DetectedText, DetectedText, DetectedText, DetectedText, DetectedText, DetectedText]
          0: DetectedText
          boundingBox: DOMRect {x: 190.78125, y: 42.1875, width: 1527.984375, height: 31.21875, top: 42.1875, …}
          cornerPoints: (4) [{…}, {…}, {…}, {…}]
          rawValue: ""
          1: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          2: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          3: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          4: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          5: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          6: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          7: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          8: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          9: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          10: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          11: DetectedText {rawValue: "", boundingBox: DOMRect, cornerPoints: Array(4)}
          length: 12

          獲取到的數組中每個元素是一個識別到的文字的 DetectedText 對象,包含了三個屬性:

          • DetectedBarcode: 文字的位置信息;
          • cornerPoints: 頂點位置信息;
          • rawValue: 文字真實值,從 demo 中我們發現這里為空,應該是該功能還未被實現完全;

          完整 Demo: https://tongchengqiu.github.io/mixin-demo/demo-shape-detection/3.html



          總結

          從目前來看,Shape Detection API 還處于測試實驗階段,其功能也不盡完善,但是相信在未來的幾年,該功能會逐漸被完善并且應用于生產環境。

          有了 Shape Detection API ,在很多場景下都可以很大程度地降低應用的復雜性,并且使得 Web 應用更加具有獨立性。

          • 應用人臉識別,我們能在用戶處理圖片的時候更精確的標識出人臉,給予更精確的建議;
          • 應用 二維碼/條形碼 識別,配合攝像頭的調用,可以直接在前端層面獲取掃描信息,進行支付、跳轉、添加好友等操作;
          • 應用文字識別,我們能夠直接在用戶端實現 OCR 的功能;

          從目前來看,越來越多的底層 API 可以直接在瀏覽器環境中使用,前端應用能夠直接使用更多的系統資源,調用更多的硬件接口。這也是未來的一個趨勢,當瀏覽器賦予了 Web 更多的能力,Web 也將可以提供給用戶更優秀的體驗。

          參考

          來源:http://www.itboth.com/d/rQ3ABz/api

          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/296

          超贊的騰訊短網址(微信url.cn短鏈接)生成api接口

          騰訊短網址的應用場景很廣,譬如短信營銷、郵件推廣、微信營銷、QQ營銷、自媒體推廣、渠道推廣等,都會用到短網址。究其原因是在于短網址可以降低推廣成本、用戶記憶成本,提高用戶點擊率;在特定的場景下推廣還能規避關鍵詞,防止域名被攔截

          API是什么?

          API就是接口,就是通道,負責一個程序和其他軟件的溝通,本質是預先定義的函數。譬如我們去辦事,窗口就類似一個API,如果對于某一件不簡單的事情,這個窗口能做到讓我們,當然,API不太一樣,適用接口隔離原則,即使用多個隔離的接口

          API 接口設計規范

          這篇文章分享 API 接口設計規范,目的是提供給研發人員做參考。規范是死的,人是活的,希望自己定的規范,不要被打臉。url?后面的參數,存放請求接口的參數數據。

          JSON Web 令牌(JWT)是如何保護 API 的?

          你可以已經聽說過 JSON Web Token (JWT) 是目前用于保護 API 的最新技術。與大多數安全主題一樣,如果你打算使用它,那很有必要去了解它的工作原理(一定程度上)。問題在于,對 JWT 的大多數解釋都是技術性的,這一點讓人很頭疼。

          scrollIntoView 與 scrollIntoViewIfNeeded API 介紹

          Element.scrollIntoView()方法讓當前的元素滾動到瀏覽器窗口的可視區域內。而Element.scrollIntoViewIfNeeded()方法也是用來將不在瀏覽器窗口的可見區域內的元素滾動到瀏覽器窗口的可見區域。但如果該元素已經在瀏覽器窗口的可見區域內

          HTML5常用API

          該API可以用來檢測頁面對于用戶的可見性,即返回用戶當前瀏覽的頁面或標簽tap的狀態變化。 在最小化瀏覽器、切換tap頁面時生效.(如需對app中幾個webview進行切換操作時

          API接口設計,需要注意這4點

          原則上API接口設計一般出現在開發的詳細設計中,但是隨著諸多公司建立開放平臺,產品經理也逐漸需要能理解API接口,尤其是做平臺性的產品,還要學會定義接口。本文就關于產品經理在設計接口中需要定義什么

          vue之按鈕權限及優雅請求API

          系統開發中按鈕級權限控制也是非常重要的功能之一,可以嚴格控制不同角色用戶所擁有的功能權限。首先可以通過vue的自定義指令來控制按鈕(div,link也闊以)等的顯示與否以及是否禁用狀態。

          webService和Restful

          restful是一種架構風格,其核心是面向資源,更簡單;而webService底層SOAP協議,主要核心是面向活動;兩個都是通過web請求調用接口

          使用 JS 來動態操作 css ,你知道幾種方法?

          JavaScript 可以說是交互之王,它作為腳本語言加上許多 Web Api 進一步擴展了它的特性集,更加豐富界面交互的可操作性。這類 API 的例子包括WebGL API、Canvas API、DOM API,還有一組不太為人所知的 CSS API

          fly63.com版權所有,內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网