clarifai
clarifai
API 서비스clarifai는 이미지 특화된 서비스를 API 형태로 제공하고 있다. 가격은 월마다 5,000번 작업에 대해서는 무료 그외 Essential
, Business
, Enterprise
, Public Sector
에 대해서 별도 가격정책을 집행하고 있다. 전자우편을 인증하지 않을 경우 100번 작업으로 호출건수가 제약된다.
clarifai
APIKEY 발급 1가장 먼저, https://clarifai.com/ 웹사이트를 방문하여 회원가입하고 앱을 하나 만들고 인증키를 “GET API KEY”를 통해서 받아낸다.
usethis::edit_r_environ()
명령어로 CLARIFAI_API_KEY
값을 설정하고. 그리고 주석을 달아 다른 API KEY와 혼동되지 않도록 한다. API KEY 설정 결과값은 .Renviron 파일에 저장된다.
가장 먼저 http://i.imgur.com/XmAr3jV.jpg 사진 속 강아지를 인식하도록 한다. 이를 위해서 이미지 요청 URL을 JSON 형태로 다음과 같이 준비한다. 그리고 POST()
로 던져 결과값을 반환받는다.
library(tidyverse)
library(httr)
library(rjson)
# usethis::edit_r_environ()
base_url <- "https://api.clarifai.com/v2/models/aaa03c23b3724a16a56b629203edc62c/outputs"
requests <- '
{
"inputs": [
{
"data": {
"image": {
"url": "http://i.imgur.com/XmAr3jV.jpg"
}
}
}
]
}'
clarifai_res <- POST(base_url,
add_headers(
"Authorization" = paste0("Key ", Sys.getenv("CLARIFAI_API_KEY")),
"Content-Type" = "application/json"),
body = requests)
clarifai_res
Response [https://api.clarifai.com/v2/models/aaa03c23b3724a16a56b629203edc62c/outputs]
Date: 2019-04-21 14:19
Status: 200
Content-Type: application/json; charset=UTF-8
Size: 2.32 kB
for
문을 돌려도 되고 purrr
팩키지를 사용해서 결과값을 추출해도 된다.
clarifai_res_parsed <- content(clarifai_res, "parsed")
# for (result in clarifai_res_parsed$outputs[[1]]$data$concepts){
# message('object: ', result$name, ' -- probability: ', result$value)
# }
clarifai_res_df <- clarifai_res_parsed$outputs[[1]]$data$concepts %>%
enframe() %>%
mutate(id = map_chr(value, ~.$id),
name = map_chr(value, ~.$name),
value = map_dbl(value, ~.$value))
clarifai_res_df %>%
DT::datatable()
로컬 컴퓨터에 저장된 이미지를 식별하는데는 다소 다른 방식이 필요하다. RCurl
팩키지 base64Encode
함수를 사용해서 base64로 인코딩하여 이미지를 불러읽어 처리한다.
library(RCurl)
suji_res <- POST(base_url,
body = sprintf('{ "inputs": [{"data": {"image": {"base64": "%s"}}}]}',
base64Encode(readBin("fig/suji.jpg", "raw", file.info("fig/suji.jpg")[1, "size"])), "txt"),
add_headers("Authorization" = paste0("Key ", Sys.getenv("CLARIFAI_API_KEY")),
"Content-Type" = "application/json"))
suji_res
Response [https://api.clarifai.com/v2/models/aaa03c23b3724a16a56b629203edc62c/outputs]
Date: 2019-04-21 14:19
Status: 200
Content-Type: application/json; charset=UTF-8
Size: 2.4 kB
로컬 컴퓨터에 저장된 fig/suji.jpg
파일을 clarifai 이미지 API에 전송하여 처리한 결과를 다음과 같이 깔금하게 정리한다.
suji_res_parsed <- content(suji_res, "parsed")
suji_res_df <- suji_res_parsed$outputs[[1]]$data$concepts %>%
enframe() %>%
mutate(id = map_chr(value, ~.$id),
name = map_chr(value, ~.$name),
value = map_dbl(value, ~.$value))
suji_res_df %>%
DT::datatable()