captcha
fix_data_captcha
ํจ์ ์ด๋ฆ: fix_data_captcha
์ ๋ ฅ:
data d: ํ์ต ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๋ ๊ตฌ์กฐ์ฒด
int mask: ๋ฐ์ดํฐ ๋ง์คํน ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ํ๋๊ทธ ๊ฐ
๋์:
์ฃผ์ด์ง ๋ฐ์ดํฐ d์์ ๋ ์ด๋ธ์ ์์ ํ์ฌ ๋ฐํํ๋ ํจ์์ด๋ค.
์ด ํจ์๋ ๋ ์ด๋ธ์ 2๊ฐ์ฉ ๋ฌถ์ด์, ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ด 0์ผ ๊ฒฝ์ฐ์๋ ๋ ๋ฒ์งธ ๋ ์ด๋ธ์ 1๋ก ๋ฐ๊พธ๊ณ , ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ด 1์ผ ๊ฒฝ์ฐ์๋ ๋ ๋ฒ์งธ ๋ ์ด๋ธ์ 0์ผ๋ก ๋ฐ๊พผ๋ค.
๋ง์คํน ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ ๊ฒฝ์ฐ์๋ ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ด 0์ด๋ฉด ๋ ๋ฒ์งธ ๋ ์ด๋ธ๋ 0์ผ๋ก, ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ด 0์ด ์๋๋ฉด ๋ ๋ฒ์งธ ๋ ์ด๋ธ์ 0์ผ๋ก ์ค์ ํ๊ณ ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ SECRET_NUM ๊ฐ์ผ๋ก ๋ฐ๊พผ๋ค.
์ค๋ช :
์ด ํจ์๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์์ ์ฌ์ฉ๋๋ ํ์ต ๋ฐ์ดํฐ์ ๋ ์ด๋ธ์ ์์ ํ๋ ํจ์์ด๋ค. ๋ ์ด๋ธ์ ํ์ต ๋ฐ์ดํฐ์ ์ ๋ต์ ๋ํ๋ด๋ฉฐ, ์ด ํจ์์์๋ ์ฃผ์ด์ง ๋ฐ์ดํฐ์์ ๋ ์ด๋ธ์ 2๊ฐ์ฉ ๋ฌถ์ด์ ์ฒ๋ฆฌํ๋ค.
๊ฐ๊ฐ์ ๋ฌถ์์ ์ด๋ฏธ์ง์ ์๋ ๋ฌธ์ 1๊ฐ์ฉ์ ๋ํ๋ธ๋ค. ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ด 0์ธ ๊ฒฝ์ฐ, ๋ ๋ฒ์งธ ๋ ์ด๋ธ์ 1๋ก ์ค์ ํ์ฌ ํด๋น ๋ฌธ์๊ฐ ์กด์ฌํจ์ ๋ํ๋ด๊ณ , ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ด 1์ธ ๊ฒฝ์ฐ, ๋ ๋ฒ์งธ ๋ ์ด๋ธ์ 0์ผ๋ก ์ค์ ํ์ฌ ํด๋น ๋ฌธ์๊ฐ ์กด์ฌํ์ง ์์์ ๋ํ๋ธ๋ค.
๋ํ, ๋ง์คํน ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ด 0์ด๋ฉด ๋ ๋ฒ์งธ ๋ ์ด๋ธ๋ 0์ผ๋ก ์ค์ ํ๊ณ , ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ด 0์ด ์๋๋ฉด ๋ ๋ฒ์งธ ๋ ์ด๋ธ์ 0์ผ๋ก ์ค์ ํ๊ณ ์ฒซ ๋ฒ์งธ ๋ ์ด๋ธ์ SECRET_NUM ๊ฐ์ผ๋ก ๋ฐ๊พผ๋ค.
SECRET_NUM ๊ฐ์ ์จ๊ฒจ์ง ๊ฐ์ ์๋ฏธํ๋๋ฐ, ์ด๋ ๋ชจ๋ธ์ด ๋ ์ด๋ธ์ ์ด์ฉํ์ฌ ํ์ตํ ๋ ๋ ์ด๋ธ์ด 0์ธ ๊ฒฝ์ฐ์ ๋ ์ด๋ธ์ด 1์ธ ๊ฒฝ์ฐ๋ฅผ ๊ตฌ๋ถํ ์ ์๋๋ก ๋๋๋ค.
train_captcha
ํจ์ ์ด๋ฆ: train_captcha
์ ๋ ฅ:
cfgfile: ๋ชจ๋ธ ์ค์ ํ์ผ ๊ฒฝ๋ก
weightfile: ํ์ต๋ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
๋์:
์ด ํจ์๋ ์ง์ ๋ cfgfile ๋ฐ weightfile์ ์ฌ์ฉํ์ฌ captcha ์ด๋ฏธ์ง๋ฅผ ํ์ตํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํ์ต ์ค์๋ ์ด๋ฏธ์ง๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ๊ณ ์ด๋ฏธ์ง์ ๋ผ๋ฒจ์ ์์ ํ๋ ์์ ์ด ์ด๋ฃจ์ด์ง๋๋ค.
์ด๋ฏธ์ง์ ๋ผ๋ฒจ์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋๊ณ ํ์ต ๋ฐ์ดํฐ๊ฐ ๋ฒํผ์ ๋ก๋๋ฉ๋๋ค. ์ดํ train_network ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ํ์ตํ๊ณ ํ์ต๋ ๊ฐ์ค์น๋ฅผ ์ ์ฅํฉ๋๋ค.
์ค๋ช :
srand(time(0)): ๋๋ค ์๋๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
basecfg(cfgfile): cfgfile์์ ๊ธฐ๋ณธ ์ค์ ์ ๊ฐ์ ธ์ base.cfg ํ์ผ์ ์ฐ๊ณ base.cfg ํ์ผ ์ด๋ฆ์ ๋ฐํํฉ๋๋ค.
load_network(cfgfile, weightfile, 0): cfgfile๊ณผ weightfile์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ๋ก๋ํฉ๋๋ค.
get_labels("/data/captcha/reimgs.labels.list"): ๋ผ๋ฒจ ๋ชฉ๋ก ํ์ผ์์ ๋ผ๋ฒจ์ ๊ฐ์ ธ์ต๋๋ค.
get_paths("/data/captcha/reimgs.solved.list"): ์ด๋ฏธ์ง ํ์ผ ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค.
list_to_array(plist): ๋ชฉ๋ก์์ ๋ฐฐ์ด์ ๊ฐ์ ธ์ต๋๋ค.
pthread_join(load_thread, 0): ์ด๋ฏธ์ง ๋ฐ์ดํฐ๊ฐ ๋ก๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
load_data_in_thread(args): ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํฉ๋๋ค.
fix_data_captcha(train, solved): ํ์ต ๋ฐ์ดํฐ์ ๋ผ๋ฒจ์ ์์ ํฉ๋๋ค.
train_network(net, train): ๋คํธ์ํฌ๋ฅผ ํ์ตํฉ๋๋ค.
save_weights(net, buff): ํ์ต๋ ๊ฐ์ค์น๋ฅผ ์ง์ ๋ ๊ฒฝ๋ก์ ์ ์ฅํฉ๋๋ค.
test_captcha
ํจ์ ์ด๋ฆ: test_captcha
์ ๋ ฅ:
cfgfile: YOLO ๋ชจ๋ธ์ configuration ํ์ผ ๊ฒฝ๋ก
weightfile: YOLO ๋ชจ๋ธ์ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
filename - ์ ๋ ฅ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก (์ ํ์ )
๋์:
YOLO ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง์์ ๋ฌธ์ ์ธ์์ ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
์ค๋ช :
์ด ํจ์๋ YOLO ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ ๋ ฅ ์ด๋ฏธ์ง์์ ๋ฌธ์ ์ธ์์ ์ํํ๋ ํจ์์ด๋ค. ํจ์๋ ๋จผ์ YOLO ๋ชจ๋ธ์ ๋ก๋ํ๊ณ , ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๊ณ , YOLO ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์์ธก์ ์ํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
๋ง์ฝ filename์ด ์ ๊ณต๋๋ฉด, ํจ์๋ ํด๋น ํ์ผ์์ ์ด๋ฏธ์ง๋ฅผ ์ฝ๊ณ ์์ธก์ ์ํํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด, ํจ์๋ ์ฌ์ฉ์๋ก๋ถํฐ ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
๊ฒฐ๊ณผ๋ ์์ธก๋ ๋ฌธ์์ ๊ทธ ํ๋ฅ ๋ก ๊ตฌ์ฑ๋๋ค. ์์ธก๋ ๋ฌธ์๋ ๋ผ๋ฒจ ํ์ผ์์ ์ฐธ์กฐํ๋ฉฐ, top_predictions ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ธก๋ ํ๋ฅ ์ด ๋์ ์์ 26๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋๋ค.
ํจ์๋ ์ ๋ ฅ ์ด๋ฏธ์ง์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ณ , ์ถ๋ ฅ ๋ฒํผ๋ฅผ ๋น์ด๋ค.
valid_captcha
ํจ์ ์ด๋ฆ: valid_captcha
์ ๋ ฅ:
cfgfile: ๋ชจ๋ธ ๊ตฌ์ฑ ํ์ผ ๊ฒฝ๋ก
weightfile: ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ ๊ฒฝ๋ก
filename: ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ํ์ผ ์ด๋ฆ (์ต์ )
๋์:
์ฃผ์ด์ง ๋ชจ๋ธ ๊ตฌ์ฑ๊ณผ ๊ฐ์ค์น ํ์ผ์ ์ฌ์ฉํ์ฌ ์บก์ฐจ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ์ ์ด์ฉํด ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํจ
์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ๊ณผ ๋ ์ด๋ธ ์ ๋ณด๋ ๊ณ ์ ๋ ๊ฒฝ๋ก์์ ๊ฐ์ ธ์ด
๊ฐ ์ด๋ฏธ์ง๋ง๋ค ์์ธก ๊ฒฐ๊ณผ์ ์ค์ ๋ ์ด๋ธ์ ๋น๊ตํ์ฌ ์ ํ๋๋ฅผ ์ธก์ ํ๊ณ , ์ถ๋ ฅ ๊ฒฐ๊ณผ์ ์ถ๊ฐํจ
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ํฐ๋ฏธ๋์ ์ถ๋ ฅ๋๋ฉฐ, ์ต์ ์ผ๋ก ์ฃผ์ด์ง ํ์ผ ์ด๋ฆ์ ์ ์ฅ๋จ
์ค๋ช :
valid_captcha ํจ์๋ ์ฃผ์ด์ง ๋ชจ๋ธ ๊ตฌ์ฑ๊ณผ ๊ฐ์ค์น ํ์ผ์ ์ด์ฉํ์ฌ ์บก์ฐจ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ์ ํ๊ฐํ๋ ํจ์์ ๋๋ค.
๋จผ์ , get_labels ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ๋ ์ด๋ธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ load_network ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ธ์ ๋ถ๋ฌ์ต๋๋ค.
์ดํ get_paths ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์ด๋ฏธ์ง๋ง๋ค ์์ธก ๊ฒฐ๊ณผ์ ์ค์ ๋ ์ด๋ธ์ ๋น๊ตํ์ฌ ์ ํ๋๋ฅผ ์ธก์ ํ๊ณ , ์ถ๋ ฅ ๊ฒฐ๊ณผ์ ์ถ๊ฐํฉ๋๋ค.
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ํฐ๋ฏธ๋์ ์ถ๋ ฅ๋๋ฉฐ, ์ต์ ์ผ๋ก ์ฃผ์ด์ง ํ์ผ ์ด๋ฆ์ ์ ์ฅ๋ฉ๋๋ค.
run_captcha
ํจ์ ์ด๋ฆ: run_captcha
์ ๋ ฅ:
argc: ์ธ์ ๊ฐ์
argv: ์ธ์ ๋ฐฐ์ด
๋์:
์ ๋ ฅ๋ ์ธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ํจ์๋ค์ ํธ์ถํ๋ฉฐ, Captcha ์ด๋ฏธ์ง ์ธ์ ๋ชจ๋ธ์ ํ์ต, ํ ์คํธ, ๊ฒ์ฆ ๋ฑ์ ์์ ์ ์ํํจ.
์ค๋ช :
Captcha ์ด๋ฏธ์ง ์ธ์ ๋ชจ๋ธ์ ํ์ต, ํ ์คํธ, ๊ฒ์ฆ ๋ฑ์ ์์ ์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํจ์.
argv[2]์ ๊ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ํจ์๋ค์ ํธ์ถํจ.
argv[2] ๊ฐ์ด "train"์ผ ๊ฒฝ์ฐ, train_captcha ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ชจ๋ธ์ ํ์ตํจ.
argv[2] ๊ฐ์ด "test"์ผ ๊ฒฝ์ฐ, test_captcha ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํจ.
argv[2] ๊ฐ์ด "valid"์ผ ๊ฒฝ์ฐ, valid_captcha ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ์ ์ด์ฉํด ๋ชจ๋ธ์ ์ฑ๋ฅ์ ๊ฒ์ฆํจ.
argv[3]์ ๋ชจ๋ธ ๊ตฌ์ฑ ํ์ผ(.cfg)์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋.
argv[4]๋ ๋ชจ๋ธ ๊ฐ์ค์น ํ์ผ(.weights)์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋. (์ ํ ์ฌํญ)
argv[5]๋ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋. (์ ํ ์ฌํญ)
Last updated
Was this helpful?