art

#include "darknet.h"

#include <sys/time.h>

demo_art

void demo_art(char *cfgfile, char *weightfile, int cam_index)
{
#ifdef OPENCV
    network *net = load_network(cfgfile, weightfile, 0);
    set_batch_network(net, 1);

    srand(2222222);

    void * cap = open_video_stream(0, cam_index, 0,0,0);

    char *window = "ArtJudgementBot9000!!!";
    if(!cap) error("Couldn't connect to webcam.\n");
    int i;
    int idx[] = {37, 401, 434};
    int n = sizeof(idx)/sizeof(idx[0]);

    while(1){
        image in = get_image_from_stream(cap);
        image in_s = resize_image(in, net->w, net->h);

        float *p = network_predict(net, in_s.data);

        printf("\033[2J");
        printf("\033[1;1H");

        float score = 0;
        for(i = 0; i < n; ++i){
            float s = p[idx[i]];
            if (s > score) score = s;
        }
        score = score;
        printf("I APPRECIATE THIS ARTWORK: %10.7f%%\n", score*100);
        printf("[");
	int upper = 30;
        for(i = 0; i < upper; ++i){
            printf("%c", ((i+.5) < score*upper) ? 219 : ' ');
        }
        printf("]\n");

        show_image(in, window, 1);
        free_image(in_s);
        free_image(in);
    }
#endif
}

ํ•จ์ˆ˜ ์ด๋ฆ„: demo_art

์ž…๋ ฅ:

  • cfgfile: YOLO ๋ชจ๋ธ ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ

  • weightfile: ํ•™์Šต๋œ ๊ฐ€์ค‘์น˜ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ

  • cam_index: ์‚ฌ์šฉํ•  ์นด๋ฉ”๋ผ์˜ ์ธ๋ฑ์Šค

๋™์ž‘:

  • ์ฃผ์–ด์ง„ cfgfile๊ณผ weightfile์„ ์‚ฌ์šฉํ•˜์—ฌ YOLO ๋ชจ๋ธ์„ ๋กœ๋“œํ•œ๋‹ค.

  • ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋ธ์˜ ํฌ๊ธฐ์— ๋งž๊ฒŒ ์กฐ์ ˆํ•œ๋‹ค.

  • ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ ๋ฌผ์ฒด๋ฅผ ๊ฒ€์ถœํ•˜๊ณ  ๊ฐ ๋ฌผ์ฒด์˜ ํด๋ž˜์Šค ํ™•๋ฅ ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

  • ๊ณ„์‚ฐ๋œ ํด๋ž˜์Šค ํ™•๋ฅ ์„ ์ด์šฉํ•˜์—ฌ ์ž‘ํ’ˆ์˜ ํ‰๊ฐ€ ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ์ž…๋ ฅ ์ด๋ฏธ์ง€๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•œ๋‹ค.

  • ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

์„ค๋ช…:

  • ์ด ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ cfgfile๊ณผ weightfile์„ ์‚ฌ์šฉํ•˜์—ฌ YOLO ๋ชจ๋ธ์„ ๋กœ๋“œํ•˜๊ณ , ์ด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์นด๋ฉ”๋ผ๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋˜๋Š” ์ด๋ฏธ์ง€์—์„œ ๋ฌผ์ฒด๋ฅผ ๊ฒ€์ถœํ•˜๊ณ  ํ‰๊ฐ€ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์˜ˆ์ œ ์ฝ”๋“œ์ด๋‹ค.

  • ์ด ํ•จ์ˆ˜๋Š” OpenCV๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด์— ์ด๋ฏธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด๋‚˜ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

  • ๋”ฐ๋ผ์„œ ์ด ํ•จ์ˆ˜๋Š” YOLO ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ์ฒด ๊ฒ€์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜ˆ์ œ ์ฝ”๋“œ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

run_art

void run_art(int argc, char **argv)
{
    int cam_index = find_int_arg(argc, argv, "-c", 0);
    char *cfg = argv[2];
    char *weights = argv[3];
    demo_art(cfg, weights, cam_index);
}

ํ•จ์ˆ˜ ์ด๋ฆ„: run_art

์ž…๋ ฅ:

  • argc์™€ argv

๋™์ž‘:

  • ์ฃผ์–ด์ง„ ์ธ์ˆ˜๋“ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ demo_art ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…:

  • ์ฃผ์–ด์ง„ argc์™€ argv๋ฅผ ํ†ตํ•ด cam_index, cfg, weights๋ฅผ ์„ค์ •ํ•˜๊ณ  demo_art ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • demo_art ํ•จ์ˆ˜๋Š” ์‹ค์‹œ๊ฐ„ ์›น์บ  ๋น„๋””์˜ค ์ŠคํŠธ๋ฆผ์—์„œ ์˜ˆ์ˆ  ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•œ ๋น„๋””์˜ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • cam_index๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ์นด๋ฉ”๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ์นด๋ฉ”๋ผ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Last updated

Was this helpful?