80 lines
2.8 KiB
Lua
80 lines
2.8 KiB
Lua
local function request(imageUrl)
|
||
local api = "https://faceplusplus-faceplusplus.p.mashape.com/detection/detect?"
|
||
local parameters = "attribute=gender%2Cage%2Crace"
|
||
parameters = parameters .. "&url="..(URL.escape(imageUrl) or "")
|
||
local url = api..parameters
|
||
local https = require("ssl.https")
|
||
local respbody = {}
|
||
local ltn12 = require "ltn12"
|
||
local headers = {
|
||
["X-Mashape-Key"] = cred_data.x_mashape_key,
|
||
["Accept"] = "Accept: application/json"
|
||
}
|
||
print(url)
|
||
local body, code, headers, status = https.request{
|
||
url = url,
|
||
method = "GET",
|
||
headers = headers,
|
||
sink = ltn12.sink.table(respbody),
|
||
protocol = "tlsv1"
|
||
}
|
||
if code ~= 200 then return "", code end
|
||
local body = table.concat(respbody)
|
||
return body, code
|
||
end
|
||
|
||
local function parseData(data)
|
||
local jsonBody = json:decode(data)
|
||
local response = ""
|
||
if jsonBody.error ~= nil then
|
||
if jsonBody.error == "IMAGE_ERROR_FILE_TOO_LARGE" then
|
||
response = response .. "The image is too big. Provide a smaller image."
|
||
elseif jsonBody.error == "IMAGE_ERROR_FAILED_TO_DOWNLOAD" then
|
||
response = response .. "Is that a valid url for an image?"
|
||
else
|
||
response = response .. jsonBody.error
|
||
end
|
||
elseif jsonBody.face == nil or #jsonBody.face == 0 then
|
||
response = response .. "No faces found"
|
||
else
|
||
response = response .. #jsonBody.face .." face(s) found:\n\n"
|
||
for k,face in pairs(jsonBody.face) do
|
||
local raceP = ""
|
||
if face.attribute.race.confidence > 85.0 then
|
||
raceP = face.attribute.race.value:lower()
|
||
elseif face.attribute.race.confidence > 50.0 then
|
||
raceP = "(probably "..face.attribute.race.value:lower()..")"
|
||
else
|
||
raceP = "(posibly "..face.attribute.race.value:lower()..")"
|
||
end
|
||
if face.attribute.gender.confidence > 85.0 then
|
||
response = response .. "There is a "
|
||
else
|
||
response = response .. "There may be a "
|
||
end
|
||
response = response .. raceP .. " " .. face.attribute.gender.value:lower() .. " "
|
||
response = response .. ", " .. face.attribute.age.value .. "(<28>".. face.attribute.age.range ..") years old \n"
|
||
end
|
||
end
|
||
return response
|
||
end
|
||
|
||
local function run(msg, matches)
|
||
--return request('http://www.uni-regensburg.de/Fakultaeten/phil_Fak_II/Psychologie/Psy_II/beautycheck/english/durchschnittsgesichter/m(01-32)_gr.jpg')
|
||
local data, code = request(matches[1])
|
||
if code ~= 200 then return "There was an error. #"..code end
|
||
return parseData(data)
|
||
end
|
||
|
||
return {
|
||
description = "Who is in that photo?",
|
||
usage = {
|
||
"/face [url]",
|
||
"/recognise [url]"
|
||
},
|
||
patterns = {
|
||
"^/face (.*)$",
|
||
"^/recognise (.*)$"
|
||
},
|
||
run = run
|
||
} |