自: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
讀音:派框架,官網:https://www.phalapi.net/
PhalApi是一個PHP輕量級開源接口框架,致力于快速開發接口服務。支持HTTP/SOAP/RPC等協議,可用于搭建接口/微服務/RESTful接口/Web Services。承諾永久免費,可用于商業用途。
它支持自動生成接口文檔、自動進行參數校驗、自動生成單元測試代碼、自動擁有CURD數據接口、自動安裝程序,讓接口開發更簡單、更高效、更專業。
PhalApi官網截圖:
使用PhalApi開源接口框架,能快速開發編寫你的API接口,并能自動生成在線接口文檔。
在線示例:
PhalApi會根據你編寫的接口的參數配置和代碼注釋,自動實時生成在線接口文檔。接口列表頁效果類似如下:
PhalApi還支持在線接口測試、請求示例說明、生成離線版HTML接口文檔、實時更新。接口文檔詳情頁效果類似如下:
使用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');
專為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 錯誤處理
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 2.x 版本的系統架構如下:
溫馨提示:以上擴展需要先通過composer安裝再使用。更多擴展類庫的使用和開發,請參考文檔:PhalApi框架擴展類庫:http://docs.phalapi.net/#/v2.0/library。
溫馨提示:應用插件和composer擴展的區別在于,應用插件顆粒度更大,功能更具體,可能不僅有數據庫、接口、界面、還可能配合其他終端,并且不受composer的規范約束,是PhalApi自主發明和設計的開發方式。更多請參考:第三方應用插件開發教程:http://docs.phalapi.net/#/v2.0/how-to-dev-plugin。
以下產品均使用了PhalApi開源框架,并為官方自主研發的產品,歡迎個人/團隊/企業使用。
接口大師-即刻搭建您的接口開放平臺(原名:PhalApi專業版)
產品官網:http://pro.phalapi.net/
果創云-后端低代碼開發平臺
產品官網:http://yesapi.cn/
YesDev協作云-在線協作你的全部項目
產品官網:https://www.yesdev.cn/
2.x 版本系統架構
主要分為三層:
其中,各自的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)架構,用于完成人臉檢測、識別和特征點檢測任務。
像往常一樣,我們將查看一個簡單的代碼示例,這將使你能立即通過短短幾行代碼中的程序包開始了解這個 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 有了一個初步的認識。同時,我也建議你看看文中給出的代碼倉庫中的其它示例。好好地把這個程序包玩個痛快吧!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。