使用R语言对照片人物进行情绪分析
人脸提供关于情绪的各种信息。微软于2015年12月推出免费服务,分析人脸,进行情绪检测。
检测到的情绪是愤怒,蔑视,厌恶,恐惧,幸福,中立,悲伤和惊喜。 这些情绪被理解为与特定的面部表情跨文化和普遍传达。
Emotion API将图像中的面部表情作为输入,并使用Face API返回图像中每个面部的一组情绪的置信度以及面部的边界框。
在R中的实现允许以结构化的方式分析人脸。 注意,必须创建一个帐户来使用Face API。
该示例引用了一个简单的示例:使用的是现任美国总统奥巴马的照片;如下
需要加载的包有: httr, XML, stringr, ggplot2.
# 加载相关包 library("httr")#链接API library("XML")#爬取网页数据 library("stringr")#字符串处理 library("ggplot2")#绘图使用 # Define image source img.url = 'https://www.whitehouse.gov/sites/whitehouse.gov/files/images/first-family/44_barack_obama[1].jpg' # Define Microsoft API URL to request data URL.emoface = 'https://api.projectoxford.ai/emotion/v1.0/recognize' # Define access key (access key is available via: https://www.microsoft.com/cognitive-services/en-us/emotion-api) emotionKEY = 'XXXX' # 在此处输入你获取的key # Define image mybody = list(url = img.url) # Request data from Microsoft faceEMO = POST( url = URL.emoface, content_type('application/json'), add_headers(.headers = c('Ocp-Apim-Subscription-Key' = emotionKEY)), body = mybody, encode = 'json' ) # Show request results (if Status=200, request is okay) faceEMO # Reuqest results from face analysis Obama = httr::content(faceEMO)[[1]] Obama # Define results in data frame o<-as.data.frame(as.matrix(Obama$scores)) # Make some transformation o$V1 <- lapply(strsplit(as.character(o$V1 ), "e"), "[", 1) o$V1<-as.numeric(o$V1) colnames(o)[1] <- "Level" # Define names o$Emotion<- rownames(o) # Make plot ggplot(data=o, aes(x=Emotion, y=Level)) + geom_bar(stat="identity")
下面就是对这张照片的情感分析图。
#人脸检测 ##################################################################### # Define image source img.url = 'https://www.whitehouse.gov/sites/whitehouse.gov/files/images/first-family/44_barack_obama[1].jpg' # Define Microsoft API URL to request data faceURL = "https://api.projectoxford.ai/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=true&returnFaceAttributes=age" # Define access key (access key is available via: https://www.microsoft.com/cognitive-services/en-us/face-api) faceKEY = 'a868182e859c4458953f69dab084f5e8' # Define image mybody = list(url = img.url) # Request data from Microsoft faceResponse = POST( url = faceURL, content_type('application/json'), add_headers(.headers = c('Ocp-Apim-Subscription-Key' = faceKEY)), body = mybody, encode = 'json' ) # Show request results (if Status=200, request is okay) faceResponse # Reuqest results from face analysis ObamaR = httr::content(faceResponse)[[1]] # Define results in data frame OR<-as.data.frame(as.matrix(ObamaR$faceLandmarks)) # Make some transformation to data frame OR$V2 <- lapply(strsplit(as.character(OR$V1), "\\="), "[", 2) OR$V2 <- lapply(strsplit(as.character(OR$V2), "\\,"), "[", 1) colnames(OR)[2] <- "X" OR$X<-as.numeric(OR$X) OR$V3 <- lapply(strsplit(as.character(OR$V1), "\\y = "), "[", 2) OR$V3 <- lapply(strsplit(as.character(OR$V3), "\\)"), "[", 1) colnames(OR)[3] <- "Y" OR$Y<-as.numeric(OR$Y) OR$V1<-NULL OR
结果如下:
是他脸部的特征值:
X Y pupilLeft 475.4 158.6 pupilRight 590.6 157.3 noseTip 534.4 227.7 mouthLeft 460.8 273.7 mouthRight 603.6 268.2 eyebrowLeftOuter 425.2 154.8 eyebrowLeftInner 508.4 142.3 eyeLeftOuter 458.6 162.6 eyeLeftTop 473.6 153.8 eyeLeftBottom 475.9 164.9 eyeLeftInner 492.8 162.0 eyebrowRightInner 552.3 141.4 eyebrowRightOuter 636.0 156.2 eyeRightInner 571.7 159.9 eyeRightTop 588.1 152.5 eyeRightBottom 587.4 163.9 eyeRightOuter 605.5 161.5 noseRootLeft 511.2 163.4 noseRootRight 551.2 163.0 noseLeftAlarTop 503.1 204.6 noseRightAlarTop 559.2 201.6 noseLeftAlarOutTip 485.3 226.9 noseRightAlarOutTip 580.5 224.1 upperLipTop 530.9 264.3 upperLipBottom 532.1 272.5 underLipTop 530.3 305.1 underLipBottom 532.5 318.6
说明:本人对原博客进行翻译的时候,在某些地方进行了一定修改,与原文并不完全相同。
注转载请注明原文链接:http://blog.csdn.net/wzgl__wh/article/details/52904069
转载请注明:数据分析 » 使用R语言对照片人物进行情绪分析