整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          早知道這些免費 API,我就可以不用到處爬數據了

          自:Python知識圈

          各類無次數限制的免費API接口整理,主要是聚合數據上和API Store上的一些,還有一些其他的。

          聚合數據提供30大類,160種以上基礎數據API服務,國內最大的基礎數據API服務,下面就羅列一些免費的各類API接口。

          早知道這些API,我就不到處爬爬爬了...

          手機號碼歸屬地API接口:

          https://www.juhe.cn/docs/api/id/11

          歷史上的今天API接口:

          https://www.juhe.cn/docs/api/id/63

          股票數據API接口:

          https://www.juhe.cn/docs/api/id/21

          全國WIFI接口:

          https://www.juhe.cn/docs/api/id/18

          星座運勢接口:

          https://www.juhe.cn/docs/api/id/58

          黃金數據接口:

          https://www.juhe.cn/docs/api/id/29

          語音識別接口:

          https://www.juhe.cn/docs/api/id/134

          周公解夢接口:

          https://www.juhe.cn/docs/api/id/64

          天氣預報API接口:

          https://www.juhe.cn/docs/api/id/73

          身份證查詢API接口:

          https://www.juhe.cn/docs/api/id/38

          笑話大全API接口:

          https://www.juhe.cn/docs/api/id/95

          郵編查詢接口:

          https://www.juhe.cn/docs/api/id/66

          老黃歷接口:

          https://www.juhe.cn/docs/api/id/65

          網站安全檢測接口:

          https://www.juhe.cn/docs/api/id/19

          手機固話來電顯示接口:

          https://www.juhe.cn/docs/api/id/72

          基金財務數據接口:

          https://www.juhe.cn/docs/api/id/28

          成語詞典接口:

          https://www.juhe.cn/docs/api/id/157

          新聞頭條接口:

          https://www.juhe.cn/docs/api/id/235

          IP地址接口:

          https://www.juhe.cn/docs/api/id/1

          問答機器人接口:

          https://www.juhe.cn/docs/api/id/112

          匯率API接口:

          https://www.juhe.cn/docs/api/id/80

          電影票房接口:

          https://www.juhe.cn/docs/api/id/44

          萬年歷API接口:

          https://www.juhe.cn/docs/api/id/177

          NBA賽事接口:

          https://www.juhe.cn/docs/api/id/92

          IP地址查詢

          http://apistore.baidu.com/apiworks/servicedetail/114.html

          頻道新聞API_易源

          http://apistore.baidu.com/apiworks/servicedetail/688.html

          微信熱門精選 :

          http://apistore.baidu.com/apiworks/servicedetail/632.html

          天氣查詢

          http://apistore.baidu.com/apiworks/servicedetail/112.html

          中國和世界天氣預報

          http://apistore.baidu.com/apiworks/servicedetail/478.html

          股票查詢

          http://apistore.baidu.com/apiworks/servicedetail/115.html

          身份證查詢:

          http://apistore.baidu.com/apiworks/servicedetail/113.html

          美女圖片

          http://apistore.baidu.com/apiworks/servicedetail/720.html

          音樂搜索

          http://apistore.baidu.com/apiworks/servicedetail/1020.html

          圖靈機器人

          http://apistore.baidu.com/apiworks/servicedetail/736.html

          匯率轉換

          http://apistore.baidu.com/apiworks/servicedetail/119.html

          節假日

          http://apistore.baidu.com/apiworks/servicedetail/1116.html

          pullword在線分詞服務

          http://apistore.baidu.com/apiworks/servicedetail/143.html

          去哪兒網火車票

          http://apistore.baidu.com/apiworks/servicedetail/697.html

          笑話大全

          http://apistore.baidu.com/apiworks/servicedetail/864.html

          銀行卡查詢服務

          http://apistore.baidu.com/apiworks/servicedetail/735.html

          語音合成

          http://apistore.baidu.com/apiworks/servicedetail/867.html

          宅言API-動漫臺詞接口

          http://apistore.baidu.com/apiworks/servicedetail/446.html

          去哪兒景點門票查詢

          http://apistore.baidu.com/apiworks/servicedetail/140.html

          手機號碼歸屬地

          http://apistore.baidu.com/apiworks/servicedetail/794.html

          體育新聞

          http://apistore.baidu.com/apiworks/servicedetail/711.html

          手機歸屬地查詢

          http://apistore.baidu.com/apiworks/servicedetail/709.html

          科技新聞

          http://apistore.baidu.com/apiworks/servicedetail/1061.html

          空氣質量指數

          http://apistore.baidu.com/apiworks/servicedetail/116.html

          天狗健康菜譜

          http://apistore.baidu.com/apiworks/servicedetail/987.html

          熱門游記列表

          http://apistore.baidu.com/apiworks/servicedetail/520.html

          天狗藥品查詢

          http://apistore.baidu.com/apiworks/servicedetail/916.html

          漢字轉拼音

          http://apistore.baidu.com/apiworks/servicedetail/1124.html

          國際新聞

          http://apistore.baidu.com/apiworks/servicedetail/823.html

          彩票

          http://apistore.baidu.com/apiworks/servicedetail/164.html

          微信精選

          http://apistore.baidu.com/apiworks/servicedetail/863.html

          天狗健康資訊

          http://apistore.baidu.com/apiworks/servicedetail/888.html

          興趣點檢索

          http://apistore.baidu.com/apiworks/servicedetail/182.html

          用藥參考

          http://apistore.baidu.com/apiworks/servicedetail/754.html

          天狗健康知識

          http://apistore.baidu.com/apiworks/servicedetail/899.html

          奇聞趣事

          http://apistore.baidu.com/apiworks/servicedetail/633.html

          花邊新聞

          http://apistore.baidu.com/apiworks/servicedetail/768.html

          天狗醫院大全

          http://apistore.baidu.com/apiworks/servicedetail/988.html

          生活健康

          http://apistore.baidu.com/apiworks/servicedetail/989.html

          一些其他的API接口

          豆瓣開放

          https://developers.douban.com/wiki/

          淘寶開放平臺

          http://open.taobao.com/

          圖靈語音

          http://www.tuling123.com/help/h_cent_andriodsdk.jhtml

          訊飛語音

          http://www.xfyun.cn/robots/solution

          馬化騰的微信開放平臺(對應的還有騰訊開放平臺)

          https://open.weixin.qq.com/

          融云IM

          https://developer.rongcloud.cn/signin

          百度開發者中心

          http://developer.baidu.com/

          人臉識別

          http://www.faceplusplus.com.cn/

          高德地圖:

          http://lbs.amap.com/

          蜻蜓FM:

          http://open.qingting.fm

          halApi開源接口框架

          讀音:派框架,官網:https://www.phalapi.net/

          PhalApi是一個PHP輕量級開源接口框架,致力于快速開發接口服務。支持HTTP/SOAP/RPC等協議,可用于搭建接口/微服務/RESTful接口/Web Services。承諾永久免費,可用于商業用途。

          它支持自動生成接口文檔、自動進行參數校驗、自動生成單元測試代碼、自動擁有CURD數據接口、自動安裝程序,讓接口開發更簡單、更高效、更專業。

          PhalApi官網截圖:


          在線示例

          使用PhalApi開源接口框架,能快速開發編寫你的API接口,并能自動生成在線接口文檔。

          在線示例:

          • 在線接口文檔:http://demo.phalapi.net/docs.php
          • 接口詳情文檔(以默認接口為例):http://demo.phalapi.net/docs.php?service=App.Site.Index&detail=1&type=fold
          • 默認接口服務:http://demo.phalapi.net/?s=App.Site.Index


          PhalApi會根據你編寫的接口的參數配置和代碼注釋,自動實時生成在線接口文檔。接口列表頁效果類似如下:

          PhalApi還支持在線接口測試、請求示例說明、生成離線版HTML接口文檔、實時更新。接口文檔詳情頁效果類似如下:

          快速安裝

          composer一鍵安裝

          使用composer創建項目的命令,可實現一鍵安裝。

          $ composer create-project phalapi/phalapi

          溫馨提示:關于composer的使用,請參考Composer 中文網 / Packagist 中國全量鏡像。

          手動下載安裝

          或者,也可以進行手動安裝。將此Git項目代碼下載解壓后,進行可選的composer更新,即:

          $ composer update

          部署

          Nginx配置

          如果使用的是Nginx,可參考以下配置。

          server {
              listen 80;
              server_name dev.phalapi.net;
              # 將根目錄設置到public目錄
              root /path/to/phalapi/public;
              charset utf-8;
          
          
              location / {
                  index index.php;
              }
          
          
              location ~ \.php$ {
                  fastcgi_split_path_info ^(.+\.php)(/.+)$;
                  # 根據當前環境,選擇合適的通訊方式
                  # fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
                  fastcgi_pass 127.0.0.1:9000;
                  fastcgi_index index.php;
                  include fastcgi_params;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
              }
          }

          配置時需要將網站根目錄設置到public目錄,配置保存后重啟nginx。

          溫馨提示:推薦將訪問根路徑指向/path/to/phalapi/public。

          數據庫配置

          如何使用的是MySQL數據庫,參考修改./config/dbs.php數據庫配置。

          return array(
              /**
               * DB數據庫服務器集群 / database cluster
               */
              'servers' => array(
                  'db_master' => array(                       // 服務器標記 / database identify
                      'type'      => 'mysql',                 // 數據庫類型,暫時只支持:mysql, sqlserver / database type
                      'host'      => '127.0.0.1',             // 數據庫域名 / database host
                      'name'      => 'phalapi',               // 數據庫名字 / database name
                      'user'      => 'root',                  // 數據庫用戶名 / database user
                      'password'  => '',                      // 數據庫密碼 / database password
                      'port'      => 3306,                    // 數據庫端口 / database port
                      'charset'   => 'UTF8',                  // 數據庫字符集 / database charset
                      'pdo_attr_string'   => false,           // 數據庫查詢結果統一使用字符串,true是,false否
                      'driver_options' => array(              // PDO初始化時的連接選項配置
                          // 若需要更多配置,請參考官方文檔:https://www.php.net/manual/zh/pdo.constants.php
                      ),
                  ),
              ),
          
          
              // 更多代碼省略……
          );

          最后,需要給runtime目錄添加寫入權限。

          運行和使用

          調用接口

          在PhalApi,你可以通過service參數(短名字是s參數)指定需要調用的接口服務。例如,訪問默認接口服務。

          http://dev.phalapi.net/?s=App.Site.Index

          接口請求后結果輸出類似如下:

          {
              "ret": 200,
              "data": {
                  "title": "Hello PhalApi",
                  "version": "2.4.2",
                  "time": 1501079142
              },
              "msg": ""
          }

          對應執行的PHP代碼在./src/app/Api/Site.php文件,源碼片段如下:

          <?php
          namespace App\Api;
          use PhalApi\Api;
          
          
          /**
           * 默認接口服務類
           * @author: dogstar <chanzonghuang@gmail.com> 2014-10-04
           */
          class Site extends Api {
              public function getRules() {
                  return array(
                      'index' => array(
                          'username'  => array('name' => 'username', 'default' => 'PhalApi', 'desc' => '用戶名'),
                      ),
                  );
              }
          
          
              /**
               * 默認接口服務
               * @desc 默認接口服務,當未指定接口服務時執行此接口服務
               * @return string title 標題
               * @return string content 內容
               * @return string version 版本,格式:X.X.X
               * @return int time 當前時間戳
               * @exception 400 非法請求,參數傳遞錯誤
               */
              public function index() {
                  return array(
                      'title' => 'Hello ' . $this->username,
                      'version' => PHALAPI_VERSION,
                      'time' => $_SERVER['REQUEST_TIME'],
                  );
              }
          }

          運行效果,截圖如下:

          自動生成的接口文檔詳情頁局部截圖如下:

          翻譯

          修改./public/init.php文件,可設置當前語言。

          // 翻譯語言包設定-簡體中文
          \PhalApi\SL('zh_cn');
          
          
          // Setting language to English
          \PhalApi\SL('en');


          一張圖告訴你如何使用PhalApi 2.x

          PhalApi開發文檔

          專為PHPer準備的優雅而詳細的開發文檔,基本都能在文檔找到你要的答案,請看:PhalApi 2.x 開發文檔,http://docs.phalapi.net/#/v2.0/。

          文檔使用markdown編寫,文檔頁面截圖如下:

          開發文檔大綱:

          PhalApi 2.x 開發文檔
          
          
              前言
                  前言
                  如何升級PhalApi?
          
          
              一、快速開發
                  1.1下載與安裝
                  1.2 運行Hello World
                  1.3 如何請求接口服務
                  1.4 接口響應與在線調試
                  1.5 Api接口層
                  1.6 DataApi通用數據接口
                  1.7 Domain領域層與ADM模式
                  1.8 Model數據層與數據庫操作
                  1.9 DataModel數據基類
                  1.10 單元測試
                  1.11 自動加載和PSR-4
                  1.12 接口文檔
                  1.13 初始化
          
          
              二、數據庫
                  2.1 數據庫連接
                  2.2 數據庫與NotORM
                  2.3 數據庫使用和查詢
                  2.4 數據庫分庫分表策略
                  2.5 連接多個數據庫
                  2.6 打印和保存SQL語句
                  2.7 定制你的Model基類
          
          
              三、高級專題
                  3.1 接口參數
                  3.2 配置
                  3.3 日志
                  3.4 緩存
                  3.5 過濾器(接口簽名)
                  3.6 COOKIE
                  3.7 加密
                  3.8 國際化
                  3.9 CURL請求
                  3.10 工具和雜項
                  3.11 DI服務匯總
                  3.12 擴展類庫
                  3.13 SDK包的使用
                  3.14 腳本命令
                  3.15 MQ隊列
                  3.16 錯誤處理

          2020視頻教程

          B站首發,第一課~第十一課,配套有每節課的視頻知識點大綱。

          http://docs.phalapi.net/#/v2.0/video_1

          視頻課程:

              PhalApi 2020視頻教程
                  第一課 B站首發,2020視頻教程開講啦!
                  第二課 視頻教程 - 下載和安裝
                  第三課 視頻教程 - Hello World
                  第四課 視頻教程 - 如何請求接口服務
                  第五課 視頻教程 - 接口響應與在線調試
                  第六課 視頻教程 - Api接口層
                  第七課 視頻教程 - Domain領域業務層與ADM模式解說
                  第八課 視頻教程 - Model數據層與數據庫連接
                  第九課 視頻教程 - 測試驅動開發與PHPUnit
                  第十課 視頻教程 - 自動加載和PSR-4
                  第十一課 視頻教程 - 接口文檔
                  視頻教程 - 十分鐘體驗PhalApi Pro,讓PHP接口開發更有趣!
                  視頻教程 - 茶店應用實戰

          相關書籍

          電子書:《初識PhalApi:探索接口服務開發的技藝》

          作者:黃禪宗

          圖靈社區鏈接:https://www.ituring.com.cn/book/2405

          大綱:

          獻詞
          前言
          第一部分 探索
          第1章 遇見PhalApi
          第2章 基礎入門
          第3章 高級主題
          第4章 不只是編碼
          第二部分 項目案例
          第5章 全新的創業項目
          第6章 重寫歷史遺留項目
          第7章 一個極致的項目
          第三部分 再進一步
          第8章 PhalApi完美詮釋
          第9章 如何有效設計接口框架
          第10章 開源這條路
          附錄A 接口服務文檔模板
          致謝

          電子書:《良質!PHP企業級系統開發》

          作者:黃禪宗

          圖靈社區鏈接:https://www.ituring.com.cn/book/2664

          大綱:

          推薦序
          前言
          獻辭
          第一部分 重新定義項目開發
          第 1 章 軟件開發本質論
          第 2 章 選擇高起點
          第 3 章 向世界發布你的代碼
          第二部分 PHP高級編程
          第 4 章 回歸原生態
          第 5 章 PHPUnit單元測試新解
          第三部分 PHP企業級系統開發
          第 6 章 核心基礎模塊設計
          第 7 章 大型網站開發范式
          第 8 章 高可用接口服務系統
          第 9 章 極致的管理后臺系統
          第 10 章 深藏不露的計劃任務系統
          第四部分 追求卓越
          第 11 章 如何成為明星員工
          第 12 章 贏在角色轉換
          致謝


          子項目

          如果對PhalApi開源框架的內部實現、源代碼和技術架構感興趣,可以查看以下子項目。

          • phalapi/kernal框架內核
          • phalapi/notorm數據庫包


          PhalApi 2.x 版本的系統架構如下:

          PhalApi composer 擴展

          • phalapi/authAuth權限擴展
          • phalapi/cliCLI擴展類庫
          • phalapi/fast-routeFastRoute快速路由
          • phalapi-aliyun-ossPhalApi-OSS阿里云OSS包
          • phalapi/PHPMailer基于PHPMailer的郵件發送
          • phalapi/qiniu七牛云存儲接口調用
          • phalapi/qrcodePhalApi 二維碼擴展
          • phalapi/pinyinPhalApi 2.x 拼音擴展
          • phalapi/jwt基于PhalApi2的JWT拓展
          • chenall/phalapi-weixin微信擴展
          • phalapi/wechatmini微信小程序擴展
          • phalapi/ding-com-bot釘釘企業內部webhook機器人擴展
          • phalapi-pay支持微信支付和支付寶支付

          溫馨提示:以上擴展需要先通過composer安裝再使用。更多擴展類庫的使用和開發,請參考文檔:PhalApi框架擴展類庫:http://docs.phalapi.net/#/v2.0/library。

          PhalApi應用插件

          • 運營平臺插件
          • 應用用戶插件
          • 加密解密插件
          • 支付寶插件
          • 茶店微信小程序應用
          • 在線接口文檔主題包

          溫馨提示:應用插件和composer擴展的區別在于,應用插件顆粒度更大,功能更具體,可能不僅有數據庫、接口、界面、還可能配合其他終端,并且不受composer的規范約束,是PhalApi自主發明和設計的開發方式。更多請參考:第三方應用插件開發教程:http://docs.phalapi.net/#/v2.0/how-to-dev-plugin。

          基于PhalApi開發的技術產品

          以下產品均使用了PhalApi開源框架,并為官方自主研發的產品,歡迎個人/團隊/企業使用。


          接口大師-即刻搭建您的接口開放平臺(原名:PhalApi專業版)

          產品官網:http://pro.phalapi.net/

          果創云-后端低代碼開發平臺

          產品官網:http://yesapi.cn/


          YesDev協作云-在線協作你的全部項目

          產品官網:https://www.yesdev.cn/

          PhalApi 2.x 版本完美詮釋

          2.x 版本系統架構

          主要分為三層:

          • phalapi/phalapi 項目應用層,可使用phalapi/phalapi搭建微服務、接口系統、RESTful、WebServices等。
          • 擴展類庫 擴展類庫是指可選的、可重用的組件或類庫,可以直接集成使用,由廣大開發人員維護分享,對應原來的PhalApi-Library項目。
          • 核心框架 分別兩大部分,PhalApi核心部分kernal,以及優化后的notorm。


          其中,各自的composer和github項目分別是:

          項目

          composer

          github

          phalapi/phalapi

          phalapi/phalapi

          phalapi/phalapi

          擴展類庫

          由廣大開發人員共同維護、分享,composer建議統一注冊到phalapi。

          由廣大開發人員共同維護、分享,源代碼可維護在開發者各自的Github倉庫。

          核心框架

          phalapi/kernal

          phalapi/kernal


          框架核心部分UML靜態結構圖

          PhalApi 2.x 版本的核心框架部分的UML靜態結構圖,高清版如下所示:

          首先,綠色部分的PhalApi\PhalApi類是整個接口系統的訪問入口,也就是項目應用系統、客戶端使用的關鍵所在。相關的調用代碼,可以參考統一入口文件的實現代碼片段。

          $pai = new \PhalApi\PhalApi();
          $pai->response()->output();

          只需要兩行代碼,便可完成對接口服務的請求響應。


          其次,是黃色部分的Api、Domain和Model這三層,也就是我們常說的ADM分層架構。這部分,需要開發人員關注,因為這也是具體項目開發需要自己實現的部分。

          最后,是紅色部分的DI依賴注入,也是整個框架的核心所在。不僅在核心框架中使用頻率最高,乃至在項目應用中也會經常被用到。


          核心執行流程時序圖

          PhalApi 2.x 版本的核心執行流程時序圖,與1.x 版本基本一致,可以看出,不管技術如何升級,PhalApi的最初的核心時序流程仍保持著活力。唯一變化的是各個類名。

          代碼倉庫

          Gitee碼云 - PhalApi開源接口框架(1.7k Star)

          代碼鏈接:https://gitee.com/dogstar/PhalApi

          Github - PhalApi開源接口框架(1.4 Star)

          代碼鏈接:https://github.com/phalapi/phalapi


          版本更新

          2021年7月發布更新了 PhalApi 2.17.2 版本。

          PhalApi 2.17.2 版本

          [BUG修復]

          1、SQL記錄,只提取部分必要的參數,避免全部記錄,以及避免記錄密碼等敏感信息到日志文件

          2、翻譯和DataApi參數說明補充

          3、DataModel調用不存在方法時的異常提示信息,去掉多余的美元符號

          4、在線接口文檔模板判斷調整,避免出現warning


          更多歷史版本更新日記,請查看:

          http://docs.phalapi.net/#/v2.0/changelog

          自IT Next,作者:Vincent Mühler,機器之心編譯,參與:Geek AI、張倩。

          本文將為大家介紹一個建立在「tensorflow.js」內核上的 javascript API——「face-api.js」,它實現了三種卷積神經網絡架構,用于完成人臉檢測、識別和特征點檢測任務,可以在瀏覽器中進行人臉識別。

          號外!號外!現在人們終于可以在瀏覽器中進行人臉識別了!本文將為大家介紹「face-api.js」,這是一個建立在「tensorflow.js」內核上的 javascript 模塊,它實現了三種卷積神經網絡(CNN)架構,用于完成人臉檢測、識別和特征點檢測任務。

          • face-api.js:https://github.com/justadudewhohacks/face-api.js
          • TensorFlow.js:https://github.com/tensorflow/tfjs-core

          像往常一樣,我們將查看一個簡單的代碼示例,這將使你能立即通過短短幾行代碼中的程序包開始了解這個 API。讓我們開始吧!

          我們已經有了「face-recognition.js」,現在又來了另一個同樣的程序包?

          如果你閱讀過本文作者另一篇關于「node.js」環境下進行人臉識別的文章《Node.js + face-recognition.js : Simple and Robust Face Recognition using Deep Learning》(Node.js + face-recognition.js:通過深度學習實現簡單而魯棒的人臉識別)(https://medium.com/@muehler.v/node-js-face-recognition-js-simple-and-robust-face-recognition-using-deep-learning-ea5ba8e852),你就會知道他在之前組裝過一個類似的程序包,例如「face-recgnition.js」,從而為「node.js」引入了人臉識別功能。

          起初,作者并沒有預見到 JavaScript 社區對與人臉識別程序包的需求程度如此之高。對許多人而言,「face-recognition.js」似乎是一個不錯的、能夠免費試用的開源選項,它可以替代由微軟或亞馬遜等公司提供的付費人臉識別服務。但是作者曾多次被問道:是否有可能在瀏覽器中運行完整的人臉識別的工作流水線?

          多虧了「tensorflow.js」,這種設想最終變為了現實!作者設法使用「tf.js

          」內核實現了部分類似的工具,它們能得到和「face-recognition.js」幾乎相同的結果,但是作者是在瀏覽器中完成的這項工作!而且最棒的是,這套工具不需要建立任何的外部依賴,使用它非常方便。并且這套工具還能通過 GPU 進行加速,相關操作可以使用 WebGL 運行。

          這足以讓我相信,JavaScript 社區需要這樣的一個為瀏覽器環境而編寫的程序包!可以設想一下你能通過它構建何種應用程序。

          如何利用深度學習解決人臉識別問題

          如果想要盡快開始實戰部分,那么你可以跳過這一章,直接跳到代碼分析部分去。但是為了更好地理解「face-api.js」中為了實現人臉識別所使用的方法,我強烈建議你順著這個章節閱讀下去,因為我常常被人們問到這個問題。

          為簡單起見,我們實際想要實現的目標是在給定一張人臉的圖像時,識別出圖像中的人。為了實現這個目標,我們需要為每一個我們想要識別的人提供一張(或更多)他們的人臉圖像,并且給這些圖像打上人臉主人姓名的標簽作為參考數據。現在,我們將輸入圖像和參考數據進行對比,找到與輸入圖像最相似的參考圖像。如果有兩張圖像都與輸入足夠相似,那么我們輸出人名,否則輸出「unknown」(未知)。

          聽起來確實是個好主意!然而,這個方案仍然存在兩個問題。首先,如果我們有一張顯示了多人的圖像,并且我們需要識別出其中所有的人,將會怎樣呢?其次,我們需要建立一種相似度度量手段,用來比較兩張人臉圖像。

          人臉檢測

          我們可以從人臉檢測技術中找到第一個問題的答案。簡單地說,我們將首先定位輸入圖像中的所有人臉。「face-api.js」針對人臉檢測工作實現了一個 SSD(Single Shot Multibox Detector)算法,它本質上是一個基于 MobileNetV1 的卷積神經網絡(CNN),在網絡的頂層加入了一些人臉邊框預測層。

          該網絡將返回每張人臉的邊界框,并返回每個邊框相應的分數,即每個邊界框表示一張人臉的概率。這些分數被用于過濾邊界框,因為可能存在一張圖片并不包含任何一張人臉的情況。請注意,為了對邊界框進行檢索,即使圖像中僅僅只有一個人,也應該執行人臉檢測過程。

          人臉特征點檢測及人臉對齊

          在上文中,我們已經解決了第一個問題!然而,我想要指出的是,我們需要對齊邊界框,從而抽取出每個邊界框中的人臉居中的圖像,接著將其作為輸入傳給人臉識別網絡,因為這樣可以使人臉識別更加準確!

          為了實現這個目標,「face-api.js」實現了一個簡單的卷積神經網絡(CNN),它將返回給定圖像的 68 個人臉特征點:

          從特征點位置上看,邊界框可以將人臉居中。你可以從下圖中看到人臉檢測結果(左圖)與對齊后的人臉圖像(右圖)的對比:

          人臉識別

          現在,我們可以將提取出的對齊后的人臉圖像輸入到人臉識別網絡中,該網絡基于一個類似于 ResNet-34 的架構,基本上與 dlib(https://github.com/davisking/dlib/blob/master/examples/dnn_face_recognition_ex.cpp)中實現的架構一致。該網絡已經被訓練去學習出人臉特征到人臉描述符的映射(一個包含 128 個值的特征向量),這個過程通常也被稱為人臉嵌入。

          現在讓我們回到最初對比兩張人臉圖像的問題:我們將使用每張抽取出的人臉圖像的人臉描述符,并且將它們與參考數據的人臉描述符進行對比。更確切地說,我們可以計算兩個人臉描述符之間的歐氏距離,并根據閾值判斷兩張人臉圖像是否相似(對于 150*150 的圖像來說,0.6 是一個很好的閾值)。使用歐氏距離的效果驚人的好,當然,你也可以選用任何一種分類器。下面的 gif 動圖可視化了通過歐氏距離比較兩張人臉圖像的過程:

          至此,我們已經對人臉識別的理論有所了解。接下來讓我們開始編寫一個代碼示例。

          是時候開始編程了!

          在這個簡短的示例中,我們將看到如何一步步地運行人臉識別程序,識別出如下所示的輸入圖像中的多個人物:

          導入腳本

          首先,從 dist/face-api.js 獲得最新的版本(https://github.com/justadudewhohacks/face-api.js/tree/master/dist),或者從 dist/face-api.min.js 獲得縮減版,并且導入腳本:

          <script src="face-api.js"></script>

          如果你使用 npm 包管理工具,可以輸入如下指令:

          npm i face-api.js

          加載模型數據

          你可以根據應用程序的要求加載你需要的特定模型。但是如果要運行一個完整的端到端的示例,我們還需要加載人臉檢測、人臉特征點檢測和人臉識別模型。相關的模型文件可以在代碼倉庫中找到,鏈接如下:https://github.com/justadudewhohacks/face-api.js/tree/master/weights。

          其中,模型的權重已經被量化,文件大小相對于初始模型減小了 75%,使你的客戶端僅僅需要加載所需的最少的數據。此外,模型的權重被分到了最大為 4 MB 的數據塊中,使瀏覽器能夠緩存這些文件,這樣它們就只需要被加載一次。

          模型文件可以直接作為你的 web 應用中的靜態資源被使用,或者你可以將它們存放在另外的主機上,通過指定的路徑或文件的 url 鏈接來加載。假如你將它們與你在 public/models 文件夾下的資產共同存放在一個 models 目錄中:

          const MODEL_URL = '/models'

          await faceapi.loadModels(MODEL_URL)

          或者,如果你僅僅想要加載特定的模型:

          const MODEL_URL = '/models'

          await faceapi.loadFaceDetectionModel(MODEL_URL)

          await faceapi.loadFaceLandmarkModel(MODEL_URL)

          await faceapi.loadFaceRecognitionModel(MODEL_URL)

          從輸入圖像中得到對所有人臉的完整描述

          該神經網絡可以接收 HTML 圖像、畫布、視頻元素或張量(tensor)作為輸入。為了檢測出輸入圖像中分數(score)大于最小閾值(minScore)的人臉邊界框,我們可以使用下面的簡單操作:

          const minConfidence = 0.8

          const fullFaceDescriptions = await faceapi.allFaces(input, minConfidence)

          一個完整的人臉描述符包含了檢測結果(邊界框+分數),人臉特征點以及計算出的描述符。正如你所看到的,「faceapi.allFaces」在底層完成了本文前面的章節所討論的所有工作。然而,你也可以手動地獲取人臉定位和特征點。如果這是你的目的,你可以參考 github repo 中的幾個示例。

          請注意,邊界框和特征點的位置與原始圖像/媒體文件的尺寸有關。當顯示出的圖像尺寸與原始圖像的尺寸不相符時,你可以簡單地通過下面的方法重新調整它們的大小:

          const resized = fullFaceDescriptions.map(fd => fd.forSize(width, height))

          我們可以通過將邊界框在畫布上繪制出來對檢測結果進行可視化:

          fullFaceDescription.forEach((fd, i) => {

          faceapi.drawDetection(canvas, fd.detection, { withScore: true })

          })

          可以通過下面的方法將人臉特征點顯示出來:

          fullFaceDescription.forEach((fd, i) => {

          faceapi.drawLandmarks(canvas, fd.landmarks, { drawLines: true })

          })

          通常,我會在 img 元素的頂層覆蓋一個具有相同寬度和高度的絕對定位的畫布(想獲取更多信息,請參閱 github 上的示例)。

          人臉識別

          當我們知道了如何得到給定的圖像中所有人臉的位置和描述符后,我們將得到一些每張圖片顯示一個人的圖像,并且計算出它們的人臉描述符。這些描述符將作為我們的參考數據。

          假設我們有一些可以用的示例圖片,我們首先從一個 url 鏈接處獲取圖片,然后使用「faceapi.bufferToImage」從它們的數據緩存中創建 HTML 圖像元素:

          // fetch images from url as blobs

          const blobs = await Promise.all(

          ['sheldon.png' 'raj.png', 'leonard.png', 'howard.png'].map(

          uri => (await fetch(uri)).blob()

          )

          )

          // convert blobs (buffers) to HTMLImage elements

          const images = await Promise.all(blobs.map(

          blob => await faceapi.bufferToImage(blob)

          ))

          接下來,在每張圖像中,正如我們之前對輸入圖像所做的那樣,我們對人臉進行定位、計算人臉描述符:

          const refDescriptions = await Promsie.all(images.map(

          img => (await faceapi.allFaces(img))[0]

          ))

          const refDescriptors = refDescriptions.map(fd => fd.descriptor)

          現在,我們還需要做的就是遍歷我們輸入圖像的人臉描述符,并且找到參考數據中與輸入圖像距離最小的描述符:

          const sortAsc = (a, b) => a - b

          const labels = ['sheldon', 'raj', 'leonard', 'howard']

          const results = fullFaceDescription.map((fd, i) => {

          const bestMatch = refDescriptors.map(

          refDesc => ({

          label: labels[i],

          distance: faceapi.euclideanDistance(fd.descriptor, refDesc)

          })

          ).sort(sortAsc)[0]

          return {

          detection: fd.detection,

          label: bestMatch.label,

          distance: bestMatch.distance

          }

          })

          正如前面提到的,我們在這里使用歐氏距離作為一種相似度度量,這樣做的效果非常好。我們在輸入圖像中檢測出的每一張人臉都是匹配程度最高的。

          最后,我們可以將邊界框和它們的標簽一起繪制在畫布上,顯示檢測結果:

          // 0.6 is a good distance threshold value to judge

          // whether the descriptors match or not

          const maxDistance = 0.6

          results.forEach(result => {

          faceapi.drawDetection(canvas, result.detection, { withScore: false })

          const text = `${result.distance < maxDistance ? result.className : 'unkown'} (${result.distance})`

          const { x, y, height: boxHeight } = detection.getBox()

          faceapi.drawText(

          canvas.getContext('2d'),

          x,

          y + boxHeight,

          text

          )

          })

          至此,我希望你對如何使用這個 API 有了一個初步的認識。同時,我也建議你看看文中給出的代碼倉庫中的其它示例。好好地把這個程序包玩個痛快吧!


          主站蜘蛛池模板: 伊人色综合一区二区三区影院视频| 中文乱码精品一区二区三区| 动漫精品专区一区二区三区不卡| 国产主播福利精品一区二区| 99精品一区二区三区无码吞精| 九九无码人妻一区二区三区| 亚洲综合一区二区精品久久| 国产精品99无码一区二区| 久久精品综合一区二区三区| 国产福利电影一区二区三区,日韩伦理电影在线福| 日本免费一区二区三区四区五六区 | 精品人体无码一区二区三区| 中文字幕人妻无码一区二区三区| 国产综合无码一区二区三区| 日本高清成本人视频一区| 久久99精品一区二区三区| 精品人妻系列无码一区二区三区| 尤物精品视频一区二区三区 | 亚洲视频在线观看一区| 好爽毛片一区二区三区四无码三飞| 一区二区三区福利| 少妇一晚三次一区二区三区| 亚洲一区二区三区偷拍女厕| 国产精品538一区二区在线| 制服丝袜一区在线| 国产一区二区三区免费观在线| 日韩国产免费一区二区三区| 99精品久久精品一区二区| 国产产一区二区三区久久毛片国语| 亚洲av无码一区二区三区不卡| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 3d动漫精品一区视频在线观看| 精品在线一区二区| 福利在线一区二区| 国产精品日韩欧美一区二区三区 | 综合久久一区二区三区 | 亚洲成人一区二区| 日韩一区二区三区视频| 国产成人精品久久一区二区三区av| 色一情一乱一区二区三区啪啪高| 韩国福利影视一区二区三区|