我寫了一個(gè)程序,我難過(guò)的時(shí)候,電腦會(huì)自動(dòng)給我發(fā)貓貓的照片
大數(shù)據(jù)文摘出品
作者:Caleb
最近,國(guó)內(nèi)外糟心的事太多了,每天看得文摘菌郁郁寡歡。
每次這個(gè)時(shí)候,文摘菌都會(huì)去朋友家吸貓,吸著吸著就感覺(jué)神清氣爽了,可謂一劑良藥。
最近文摘菌發(fā)現(xiàn),吸貓治愈這個(gè)事,還不是個(gè)例。
去年,日本一對(duì)夫婦就在推特上分享了自己的生活小竅門,其中一個(gè)就是生氣的時(shí)候暫停存檔,先吸貓平復(fù)一下心情再說(shuō),就像這樣:
甚至有網(wǎng)友評(píng)論表示,吸貓有助于世界和平。
不過(guò),吸貓雖好,可不要貪杯噢。
今年1月份的時(shí)候,就有一名女子因?yàn)槲埢忌狭恕胞W鵡熱”。得了“鸚鵡熱”的人大多是因?yàn)椴恍⌒奈肓锁B(niǎo)類干燥糞便中的衣原體,雖然吸貓不一定會(huì)有這樣的“副作用”,但小心駛得萬(wàn)年船。
那么問(wèn)題來(lái)了,有沒(méi)有什么方法能夠安全吸貓,最好能在心情抑郁的瞬間就能吸到貓呢?
最近,有個(gè)名叫Andrew Healey的博主就在博客上分享了自己做的一個(gè)項(xiàng)目,只要他在電腦前露出了傷心難過(guò)的表情,電腦就會(huì)立馬給他發(fā)送貓貓的照片,雪中送炭不過(guò)如此了。
效果大概是這個(gè)樣子:
好了好了,文摘菌知道很多人已經(jīng)等不及了,我們現(xiàn)在就來(lái)看看這個(gè)項(xiàng)目到底是怎么完成的。
手把手教你“科學(xué)”吸貓
在吸貓之前,我們得讓電腦知道我們現(xiàn)在很傷心,這樣它才會(huì)給我們發(fā)貓貓照片。
在面部表情識(shí)別這塊,Healey選擇了開(kāi)源的vladmandic/human,該數(shù)據(jù)庫(kù)中提供了一個(gè)API來(lái)獲取一些常見(jiàn)情緒的權(quán)重。
['sad', 'angry', 'disgust', 'fear', 'neutral', 'happy', 'surprise']
他將情緒簡(jiǎn)單地分為“好”與“壞”,這樣對(duì)電腦來(lái)說(shuō)會(huì)更容易區(qū)分和識(shí)別,同時(shí)系統(tǒng)會(huì)給每種情緒進(jìn)行評(píng)分,總分在-1(非常差)和1(非常好)之間。
由于不想每次因?yàn)榇驀娞缇碗S意觸發(fā)系統(tǒng)運(yùn)行,Healey還添加了一個(gè)3秒追蹤平均值來(lái)評(píng)估當(dāng)前的情緒。
在添加的調(diào)試控制臺(tái)中,就能看到這些情緒分?jǐn)?shù),就像這樣:
在系統(tǒng)發(fā)送一張貓貓照片之后,它也會(huì)進(jìn)入5分鐘的待機(jī)時(shí)間,然后才會(huì)重新開(kāi)始工作。
Healey將所有前端代碼寫在一個(gè)index.html原型文件中,主循環(huán)以30-40 FPS的速度運(yùn)行。
function main() {
const config = { backend: 'webgl' }
const human = new Human.Human(config)
async function detectVideo() {
// `inputVideo` is a video of a webcam stream
const result = await human.detect(inputVideo)
// `result` contains an array of faces along with emotion weights
handleResult(result)
requestAnimationFrame(detectVideo)
}
detectVideo()
}
第一步完成了,接下來(lái)我們要讓電腦給我們發(fā)送貓貓照片。
在這里,Healey使用的是Pushover,該程序目前在程序員家庭自動(dòng)化項(xiàng)目中還挺受歡迎的。
r = requests.post(
"https://api.pushover.net/1/messages.json",
data={
"token": token,
"user": user,
"message": f"{cat_name} needs your attention.",
},
files={"attachment": (f"{cat_name}", open(cat_picture, "rb"), "image/jpeg")},
)
隨后,Healey將兩個(gè)API粘合在一起以獲取消息數(shù)據(jù)。隨機(jī)名稱來(lái)自網(wǎng)站randomuser。
網(wǎng)站地址:https://randomuser.me/api/
隨機(jī)貓貓照片:https://api.thecatapi.com/v1/images/search
實(shí)際上,獲得照片后還需要調(diào)整圖像大小,因?yàn)镃at API致力于提供高分辨率的照片,通常能有5MB。
以下就是最終得到這個(gè)函數(shù)的方式:
def shrink_cat(path):
image = Image.open(path)
image.thumbnail((400, 400))
image.save(path)
??Healey使用PythonSimpleHTTPRequestHandler來(lái)提供靜態(tài)文件,這與one-liner提供文件時(shí)運(yùn)行的服務(wù)器相同python -m http.server。
Healey的計(jì)劃是不為此運(yùn)行后端,雖然這仍然是一個(gè)可以實(shí)現(xiàn)的目標(biāo),但他發(fā)現(xiàn)用Python編寫API粘合代碼更快。當(dāng)他意識(shí)到還需要一個(gè)API路由來(lái)處理“send cat”時(shí),他正要安裝Flask,但似乎可以......通過(guò)添加這個(gè) hack 繼續(xù)使用這個(gè)簡(jiǎn)單的服務(wù)器:
class HttpRequestHandler(http.server.SimpleHTTPRequestHandler):
# future employers, please look away
# while I override this function
def translate_path(self, path):
if path == "/web/cat.json":
send_cat()
return super().translate_path(path)
超越地域和文化,AI識(shí)別16種面部表情
說(shuō)到面部識(shí)別,此前Nature就發(fā)表了一篇論文,證實(shí)了人類情感表達(dá)跨越地域和文化邊界的普遍性。
論文鏈接:https://www.nature.com/articles/s41586-020-3037-7
一般來(lái)說(shuō),人類面部有43塊不同的肌肉,這些肌肉可以被激活在眼睛、鼻子、嘴巴、下巴、下巴和眉毛周圍,從而做出數(shù)千種不同的表情。
為了研究這些表情,加州大學(xué)伯克利分校和谷歌的研究人員使用被稱為“深度神經(jīng)網(wǎng)絡(luò)”的機(jī)器學(xué)習(xí)技術(shù),分析了YouTube上約600萬(wàn)個(gè)視頻片段中的面部表情,這些視頻來(lái)自北美、中美、南美、非洲、歐洲、中東和亞洲的144個(gè)國(guó)家。
同時(shí),研究人員還創(chuàng)建了一個(gè)在線互動(dòng)地圖,展示了該算法如何跟蹤與16種情緒相關(guān)的面部表情變化,包括娛樂(lè)、憤怒、敬畏、專注、困惑、蔑視、滿足、欲望、失望、懷疑、得意、興趣、痛苦、悲傷、驚訝和勝利。
研究人員還發(fā)現(xiàn),無(wú)論身處世界各地,這16種面部表情都出現(xiàn)在類似的情境中。每個(gè)人都傾向于以類似的方式歡呼、哭泣、集中注意力和慶祝,沒(méi)有一群人會(huì)因受驚而微笑、聳肩或因高興而皺眉。
也就是說(shuō),我們用來(lái)表達(dá)情緒反應(yīng)的70%的表情是跨文化共享的。
所以,不要擔(dān)心電腦看不懂你的表情,難過(guò)的時(shí)候你就難過(guò)給它看,然后好好吸貓放松一下~
love&peace!
相關(guān)報(bào)道:
https://healeycodes.com/when-im-sad-my-computer-sends-me-a-cathttps://twitter.com/NEKOLAND13/status/1442795503859613697