Jev 1.14 이미지 입력으로 영상 속 가려지지 않은 API 키 찾기: Jev vs OpenAI Decision API vs OCR
핵심 요약
- Jev 1.14 부터 질문에 그림을 넣을 수 있다. 10월 14일 발표된 버전이고 아직 실험 기능이다. 닭 사이에 고양이를 숨긴 그림은 "고양이가 있나"에 0.96, 닭만 있는 그림은 0.03 이 나왔다.
- 새 질문 타입 box 는 위치를 상자로 돌려준다. 답은 그림 너비, 높이에 대한 비율로 위, 아래, 왼쪽, 오른쪽 네 값이다. 고양이 그림에서는 top 0.47, bottom 0.65, left 0.67, right 0.78 이었다.
- Playground 에서는 State 에
<파일 이름>을 꺾쇠로 넣어야 그림이 이어진다. Click to upload assets 로 올린 파일 이름과 꺾쇠 안 이름이 같아야 한다. - mask 가 한 프레임만 늦게 꺼져도 키는 1/30초 동안 보인다. 재생하며 눈으로는 놓치기 쉽지만, 그 프레임에서 멈추면 키를 다 읽을 수 있다. 테스트 영상에는 mask 를 다 넣었는데도 이런 프레임이 10개 있었다.
- 같은 2,506프레임에서 10개를 다 찾은 것은 Jev 하나였고, 가장 빨랐다. 잘못 잡은 프레임은 세 방법 모두 0개였다.
- OCR 과 OpenAI 는 다시 돌려도 찾는 개수가 그대로였다. 같은 프레임을 매번 같은 답으로 판단해서, 여러 번 돌린다고 놓친 프레임이 채워지지 않았다.
| 방법 | 걸린 시간 | 찾은 개수 (10개 중) | 비용 | 잘못 잡은 프레임 |
|---|---|---|---|---|
| Jev | 40초 | 10개 | 0.42달러 | 0개 |
| OpenAI Decision API | 1분 11초 | 9개 | 0.44달러 | 0개 |
| 글자 인식 (OCR) | 1분 19초 | 7개 | 무료 | 0개 |
비용은 영상 한 편 기준으로 Jev 와 OpenAI 모두 1달러가 안 됐다. 영상을 올리기 전에 가려지지 않은 키를 찾는 검사로는 Jev 가 가장 빠르고 빠짐없이 찾았다.
Playground 에 바로 붙일 내용은 Playground 치트시트로, 비교 조건은 세 방법 비교로.
Playground 치트시트
TypeSafe 콘솔의 Playground 에서 코드 없이 그림을 올려 Jev 에게 물어볼 수 있다. 영상에서 한 순서 그대로다.
| 순서 | 할 것 | 보이는 것 |
|---|---|---|
| 1 | 아래 Click to upload assets 버튼으로 그림을 올린다 | 아래 줄에 <cat-a-1568> 처럼 파일 이름 칩이 생긴다 |
| 2 | State 에 올린 파일 이름을 꺾쇠로 감싸 넣는다 | "frame": "<cat-a-1568>" 의 이름 앞에 그림 아이콘이 붙는다 |
| 3 | Questions 에 질문을 쓴다 | 오른쪽 Response 에 질문 이름과 타입(Noul, Box)이 뜬다 |
| 4 | Run 을 누른다 | Noul 은 확률(고양이 있는 그림 96%, 없는 그림 5%), Box 는 상자를 그린 그림과 네 값 |
State
꺾쇠 안의 이름은 올린 파일 이름과 같아야 한다. 다르면 그림이 연결되지 않는다.
{
"frame": "<cat-a-1568>"
}
Questions
영상 화면에 나온 질문 두 개다. noul 은 예/아니오 질문에 "예"일 확률을 돌려주는 타입이고, box 는 1.14 에서 새로 생긴 위치 찾기 타입이다. 질문 안의 `frame` 은 State 의 키를 가리킨다.
{
"Cat": {
"type": "noul",
"instructions": "Is there a cat anywhere in `frame`?",
"criteria": {
"true": "",
"false": ""
}
},
"Where": {
"type": "box",
"instructions": "the cat in `frame`"
}
}
box 답 읽는 법
{
"top": 0.47,
"bottom": 0.65,
"left": 0.67,
"right": 0.78
}
네 값 모두 그림 크기에 대한 비율이다. 1920x1080 그림이라면 상자는 가로 0.67 × 1920 = 1,286px 에서 0.78 × 1920 = 1,498px, 세로 0.47 × 1080 = 508px 에서 0.65 × 1080 = 702px 이다. 타입마다 자세한 설명은 공식 문서의 Images, Noul, Box 에 있다.
영상 줄거리, 짧게
Jev 는 if 문처럼 쓰는 모델
Jev 는 TypeSafe 가 만든 모델이다. 질문하면 글로 답하지 않고 Yes, No 같은 정해진 형태로 답하고, 그 답의 확률을 같이 준다. 그래서 코드에서 if 문처럼 쓸 수 있다. 대화하는 모델은 아니다. Jev 자체는 지난 영상에서 다뤘다.
10월 14일 Jev 1.14 가 나오면서 질문에 그림도 넣을 수 있게 됐다. 아직 실험 기능이지만, 마침 영상 작업에 필요한 일이 있어서 써 봤다.
숨은그림찾기
닭이 잔뜩 있는 그림 두 장을 만들었다. 한 장에는 고양이 한 마리를 숨겼고, 다른 한 장에는 닭만 있다. 두 장에 "이 안에 고양이가 있나"를 물으니 고양이가 숨은 그림은 0.96, 닭만 있는 그림은 0.03 이 나왔다.
box 타입으로 "고양이가 어디 있나"를 물으면 위치를 상자로 짚어 준다. 사람도 한참 찾아야 하는 크기의 고양이를 정확히 감쌌다.
Playground 에서 해 보기

Playground 아래의 Click to upload assets 버튼으로 그림을 올리고, State 에 그 파일 이름을 꺾쇠로 감싸 넣는다. 영상에서는 frame 에 <cat-a-1568> 이라고 썼다. 질문을 쓰고 Run 을 누르면 고양이가 있는 그림은 96%, 없는 그림은 5% 가 나온다.

box 로 물은 답을 누르면 그림 위에 상자를 그려 보여 준다. 숫자만 보는 것보다 맞게 짚었는지 바로 알 수 있다.
프레임과 mask
이제 실제로 하려던 일이다. 영상에서 API 키가 보이는 프레임을 찾는다.
영상은 사진을 빠르게 넘기는 것이고, 그 사진 한 장이 프레임이다. 1초에 30프레임이면 1초 동안 사진 30장이 지나간다. 테스트한 영상은 1분 54초, 모두 3,419프레임이었다.

편집할 때 화면에 개인정보가 나오면 그 위에 mask 를 씌운다. mask 가 켜지는 지점이 In 점, 꺼지는 지점이 Out 점이다.
문제는 Out 점이 한 프레임 일찍 오거나 In 점이 한 프레임 늦을 때다. 그 1/30초 동안 키가 그대로 나온다. 재생하면서 보면 거의 안 보이지만, 그 프레임에 멈추면 키를 다 읽을 수 있다. 테스트 영상에는 mask 를 다 넣었는데도 API 키가 가려지지 않은 프레임이 10개 있었다. 이 10개를 누가 다 찾는지 보는 것이 영상의 문제다.
세 방법 비교
조건은 셋 모두 같다. 영상 끝의 아웃트로 30초를 뺀 같은 2,506프레임을 읽게 하고, 프레임마다 개인정보가 보이는지 판단해 보이면 "수정 필요", 아니면 통과로 나눈다.
| 순서 | 방법 | 결과 |
|---|---|---|
| 1 | 글자 인식 (OCR) | 2,506프레임을 전부 글자로 읽어 1분 19초에 7개 |
| 2 | OpenAI Decision API | 1분 11초에 9개 |
| 3 | Jev | 40초에 10개 모두 |

10개를 다 찾은 것도, 가장 빨랐던 것도 Jev 였다. 셋 다 멀쩡한 프레임을 잘못 잡지는 않았다. 글자 인식과 OpenAI 는 여러 번 다시 돌려도 찾는 개수가 같아서, 돌리는 횟수로 놓친 프레임을 메울 수는 없었다. 비용은 영상 한 편에 Jev 0.42달러, OpenAI 0.44달러로 둘 다 1달러 아래였다. 앞으로 영상 작업에 Jev 와 Decision API 를 자주 쓰게 될 것 같다.
기록
| 항목 | 내용 |
|---|---|
| 영상 | 4분 30초 |
| 숨은그림찾기 | 고양이 있는 그림 0.96, 없는 그림 0.03 (Playground 에서는 96%, 5%) |
| box 답 | top 0.47, bottom 0.65, left 0.67, right 0.78 |
| 테스트 영상 | 1분 54초, 30fps, 3,419프레임 |
| 비교 대상 | 아웃트로 30초를 뺀 2,506프레임, 그중 API 키가 가려지지 않은 프레임 10개 |
| 결과 | Jev 40초 10개 0.42달러, OpenAI Decision API 1분 11초 9개 0.44달러, 글자 인식 1분 19초 7개 무료, 잘못 잡은 프레임 셋 다 0개 |
| 다시 돌리기 | 글자 인식, OpenAI 모두 여러 번 돌려도 찾은 개수가 같았다 |
| 링크 | TypeSafe 공식 문서, TypeSafe 콘솔 (Playground), OpenAI Decision API 문서, Jev 를 다룬 지난 영상 |
| 출처 | 영상 나레이션과 화면, 측정 기록 |
댓글
아직 댓글이 없습니다. 첫 댓글을 남겨보세요!