1. 程式人生 > >水印第四版 ~ 非人水印(新增人臉識別)

水印第四版 ~ 非人水印(新增人臉識別)

說起這個人臉識別,還真有點緣分。記得逆天以前在學生時代參加創新大賽的時候,題目就是人臉識別打卡 解決別人替人打卡的問題,想想看,要是用微軟的faceapi那還不是很容易實現的?

一張圖概括:

額,這次先看下效果,然後普及一些開發過程中的知識點,然後介紹一下微軟的FaceAPI

==》原來的功能依舊在,非人臉識別,請在訊息框中選擇

不要求人臉識別的就選否,每個月Api次數是有限的

先生成縮圖:(後期可以新增縮略比例的調節)

非同步的方式開始幹活了

好了之後會通知你(很多人用非同步的方式不會捕獲異常和完成後的通知,一會我稍微說一下)

看看人臉,免費版的精度這個地步已經很好了(19個臉就2張有點誤差

),要是你把他用來人臉打卡,完全可以允許的嘛,沒識別出來再試一試就ok了

點開一張看看,其實還是挺明顯的(網上的face api基本上都是對正臉識別比較好,側臉就差很多,微軟的這個算不錯的了【之前微軟不是有兩款小遊戲很火嘛,就是用的人臉識別】)

上面演示部分結束了,我們進入技術探討環節(技術有什麼不到位的或者還有什麼更好方案的。還望同志們提點一下,小子勇於接受批評)

先說下,設定超時時間,異常處理

完成後的通知其實也很簡單:

有人可能會說:Task.Factory.StartNew 和 Task.Run 一樣不?Run就是第一種方式,只不過自動添加了一些預設引數

這次基本上用法全了,縮圖,裁剪,水印 

生成縮圖很簡單:

 水印官方寫的很詳細:

-------------------------------------------------------------------------------------------------

一下不管這個了,說說人臉識別,之前不知道官方有sdk,自己封裝了。一起看看吧,有利於理解官方sdk:

首先定義了一個人臉識別的專用異常類:(別問我為啥不直接用Exception,不知道百度下~)

下面進行場景還原,為什麼這樣封裝,很多人不寫方法,直接貼程式碼,看的容易暈

然後是Model,我這邊沒高興封裝臉部關鍵點,需求決定一切(我只要面部矩陣),如果是Face++就得自己算了

微軟返回結果是這個:

那model自然就得這麼封裝了

注意處理一下每個欄位的負數情況(後面計算是可能為負的)

下面就是核心程式碼:(我這邊分了網頁URL和本地圖片路徑,SDK好像統一用流的方式)

為什麼我分兩種情況,看這兩張圖就能理解:

根據要求進行封裝:

看程式碼: 

 下面就是響應了

太多,我就不貼了,看對應程式碼:(微軟的提示是英文的,我得簡單封裝下)

 呼叫就不用說了吧:await FaceHelper.GetFaceModelList(path) or FaceHelper.GetFaceModelList(path).Result

微軟的api很簡單,eg:

 private static async Task<IEnumerable<Face>> UploadAndDetectFaces(string imageFilePath)
        {
            try
            {
                using (Stream imageFileStream = File.OpenRead(imageFilePath))
                {
                    var faceClient = new FaceServiceClient(FaceHelper.GetAPIKey());
                    return await faceClient.DetectAsync(imageFileStream);
                }
            }
            catch (FaceAPIException ex)
            {
                throw ex;
            }
        }

 先這樣吧,WPF不是很擅長,湊合著用吧~~

相關推薦

水印 ~ 非人水印新增人臉識別

說起這個人臉識別,還真有點緣分。記得逆天以前在學生時代參加創新大賽的時候,題目就是人臉識別打卡 解決別人替人打卡的問題,想想看,要是用微軟的faceapi那還不是很容易實現的? 一張圖概括: 額,這次先看下效果,然後普及一些開發過程中的知識點,然後介紹一下微軟的FaceAPI ==》原來

水印 ~ 變態水印這次用Magick.NET來實現,附需求分析和原始碼

以前的水印,只是簡單走起,用的是原生態的方法。現在各種變態水印,於是就不再用原生態的了,太麻煩了,這次用的是Magick,這個類庫還是很有名的,圖形化處理基本上都是支援的,至少逆天是挺喜歡的 歷史文章: 1.逆天通用水印支援Winform,WPF,Web,WP,Win10。支援位置選擇(9個位置

python(閱讀心得)系統工具

pro rename _id multi temporary inter path 運行 pid 本章將會講解python常用系統工具的介紹 python中大多數系統級接口都集中在兩個模塊: sys 和 os 但仍有部分其他標準模塊也屬於這個領域 如: 常見: glob

走入計算機的十六天css語法二

font 最大 function 不但 err 劃線 目的 osi css屬性 一 屬性選擇器 E[att] 匹配所有具有att屬性的E元素,不考慮它的值。(註意:E在此處可以省略。 比如“[cheacked]”。以下同。

neo4j圖形資料庫彈——整合springboot支援查詢路徑

正經學徒,佛系記錄,不搞事情 基於上文:https://blog.csdn.net/qq_31748587/article/details/84286411 的專案 普通的neo4j查詢路徑的cql語法如下: match l=(m)-[]-(n) return l

章 操作列表遍歷列表

    遍歷列表:        nums = ['1','2','3','4']        for  num in nums:                            print(num)        >for後面,沒有縮排的程式碼,只執行一次,不

次學習筆記c語言基礎

scanf 變量賦值 原始數據類型 多少 int 無符號數 %d 輸出 運算 1.數據類型 (1)常量與變量 (2)c語言一共有32個關鍵字 (3)變量定義:數據類型 變量名(標識符) 變量賦值:變量名=值 (4)標識符命令規則: 1)

OpenCv 之圖片人臉識別攝像頭讀入

先來張人臉識別效果圖: 1、概述 人臉識別,是基於人的臉部特徵資訊進行身份識別的一種生物識別技術。用攝像機或攝像頭採集含有人臉的影象或視訊流,並自動在影象中檢測和跟蹤人臉,進而對檢測到的人臉進行臉部的一系列相關技術,通常也叫做人像識別、面部識別。

Thinking in Java—— 第二章 一切皆對象

ati 靜態 數據類型 thinking short str 變量 屬於 字符 一.對象保存的位置 寄存器(cpu) 棧(變量) 堆(對象) 靜態域(static) 常量池(string) 非內存區池 二.基本數據類型 整數型 byte short int

CSS 權威指南 CSS實戰手冊 閱讀筆記

you 逗號 visit content 下載 傳播 適用於 給定 輸入 前言:   對於程序員,學習是無止境的,知識淘換非常快,能夠快速穩固掌握一門新技術,是一個程序員應該具備的素質.這裏將分析本人一點點不成熟的心得.   了解一門語言,了解它的概念非常重要,但是一些優秀

算法學習筆記——初級排序算法

space 倒序 優勢 name 算法 turn 資料 eply n) 時間復雜度(Time Complexity): 總運算次數表達式中受n的變化影響最大的那一項(不含系數)(註:若算法中語句執行次數為一個常數,則時間復雜度為O(1)) 若T(n)/f(n)求極限可得

練習代碼——《算法

style .so oid 2.0 gcd main i++ java static 2017年11月20日。 1 import java.util.Arrays; 2 3 public class Program 4 { 5 public

JavaScript入門經典讀書筆記

utc 文件名 ttext 文檔 開頭 rep 顯示 部分 body 第一部分 Web腳本編寫與JavaScript語言的概念 1.document.lastModified() -> 返回文檔修改日期 2.<head>標簽中的<sc

Thinking in Java 4thJava程式設計思想文件、原始碼、習題答案

  Thinking in Java 4th 中、英文兩版pdf文件,書中原始碼及課後習題答案。連結:https://pan.baidu.com/s/1BKJdtgJ3s-_rN1OB4rpLTQ 密碼:2zc4   http://greggordon.org/java/tij4/solutions.

python基礎教程)學習筆記

第四章 字典 字典一種可通過名稱來訪問其各個值的資料結構。這種資料結構稱為對映。字典是Python中唯一的內建對映型別,其中的值不按順序排列,而是儲存在鍵下。鍵可能是數、字串或元組。 4.1 字典的用途 i表示棋盤的狀態,其中每個鍵都是由座標組成的元組; ii儲存檔案修改時間,其中的鍵為檔名; ii

笨辦法學Python pdf 下載

知乎、CSDN等各大論壇技術大牛推薦的Python自學入門暢銷書《笨辦法學Python》重磅升級,所有案例均基於Python3.6編寫。  免費提供長達5個小時的配套教學視訊,用手機掃碼線上觀看視訊,更方便。  Zed A. Shaw建立了一套非常有效的Python 3學習

Java程式設計題解與上機指導七章 Java語言的高階特性 7.2藉助泛型定義一個線性表

線性表:由相同型別的物件組成的一個線性結構360百科: 定義 線性表(linear list)是資料結構的一種,一個線性表是n個具有相同特性的資料元素的有限序列。資料元素是一個抽象的符號,其具體含義在不同的情況下一般不同。 在稍複雜的線性表中,一個數據元素可由多個數據項(

JAVA 程式設計題解與上機指導三章表達式和流程控制語句 題3.9

/**3.9編寫列印乘法口訣表*/ public class MultipleTable { public static void main(String args[]) {MultipleTable multiple=new MultipleTable(); int n=

JAVA 程式設計題解與上機指導 第二章·識別符號、關鍵字和資料型別 2.12

/*2.12 設計實現一個MyGraphic類及子類,它們代表一些基本圖形,這些圖形包括矩形、三角形、圓、橢圓、菱形、梯形等。 試給能描述這些圖形所必需的屬性及必要的方法 **/ public class MyGraphic { String lineColor;//線條顏色 Strin