【MATLAB】 물고기 사진 데이터 세트를 google 이미지 검색 스크래핑으로 만들기

12227 단어 스크래핑matlab

개요



다이빙으로 찍을 수있는 대량의 물고기 사진.
무엇이 찍혀 있는지 판단하여 라벨을 지정하고 자동 정리하는 도구를 만들려고 했습니다.

이 3단계로 갑니다.
1. google 이미지 검색으로 물고기 사진을 모아 데이터 세트를 만듭니다.
2.1 데이터 세트를 사용하여 GoogLeNet의 전이 학습
3. 2의 네트워크를 사용하여 소지 사진의 물고기 이름을 추정, 라벨링

이번은 1의 비망록입니다.

사전 준비


  • Google Custom Search API를 사용할 수 있도록 허용

  • [1] 사이트 을 참고로 하여 설정했습니다.
  • 물고기 이름 목록 준비

  • csv 파일로 작성.
    이 목록을 위에서 검색합니다.
    table 데이터로서 읽어들이기 위해, 1행째는 table 변수의 이름 「jname」 「flag」를 기재.
    flag는 스크래핑되지 않은 것을 0, 끝난 것을 1로 했습니다.


    물고기 사진 스크래핑



    우선은 사전 준비로 작성한, 어명 리스트를 읽어들입니다.
    flag가 0인 것을 테이블 T3에 저장합니다.
    %% 検索したい魚の名前をリストアップ
    
    % 魚名リストの読み込み
    path = 'C:\Diving';
    folder = 'fish_dataset';
    filename = fullfile(path,folder,'fishname.csv');
    T1 = readtable(filename);
    
    % T2はflag=1のリスト(flagが0のもの消す)
    T2 = T1;
    T2(T2.flag==0,:) = [];
    
    % T3はflag=0のリスト(flagが1のもの消す)
    T3 = T1;
    T3(T3.flag==1,:) = [];
    len = size(T3,1);
    

    검색하여 다운로드하여 저장합니다.
    T3의 1 행째가 「아오미우시」였다고 하면,
  • 앵무새 폴더 만들기
  • "아오미 소"로 검색하여 검색 결과의 상위 10 개의 이미지를 다운로드하여 1.jpg ~ 10.jpg로 저장
  • "아오미 소 다이빙"에서 검색하여 검색 결과의 상위 10 건의 이미지를 다운로드하여 11.jpg ~ 20.jpg로 저장

  • 라는 흐름입니다.
    "물고기 이름 〇"뿐만 아니라 "물고기 이름 00 다이빙"에서 검색하는 것은
    물고기가 「이시다이」라든가 「시이라」라든가의 거물이라면, 낚시과 사진이 상위 10건을 차지하기 때문입니다.
    %% 検索、DL、保存
    
    % API規約の都合上50にする(2通りで検索する,50*2=100がAPIの制限)
    if len > 50
        len = 50;
    end
    option = weboptions('Timeout',60) ;
    imgurl = cell(1,10); % 1リクエストにつき10枚まで
    
    for i=1:len
        % 「アオウミウシ」フォルダを作成
        mkdir(fullfile(path,folder,T3.jname{i}));
    
        % まず、「アオウミウシ」で検索してDL、保存
        word = T3.jname{i};
        api = ['https://www.googleapis.com/customsearch/v1'...
            '?key=[APIキー]'...
            '&cx=[検索エンジンID]'...
            '&searchType=image'...
            '&q=' word...
            '&lr=lang_ja'...
            '&num=10'...
            '&start=1'];
        data = webread(api);
    
        % 1.jpg~10.jpgとして保存
        for j=1:size(data.items,1)
            imgurl{j} = data.items(j).link;
            savename = fullfile(path,folder,T3.jname{i},[int2str(j) '.jpg']);
            try
                websave(savename,imgurl{j},option);
            catch
                delete([savename '*']);
            end
        end
    
    
        % 次に、「アオウミウシ ダイビング」で検索してDL、保存
        word = [T3.jname{i} ' ダイビング'];
        api = ['https://www.googleapis.com/customsearch/v1'...
            '?key=[APIキー]'...
            '&cx=[検索エンジンID]'...
            '&searchType=image'...
            '&q=' word...
            '&lr=lang_ja'...
            '&num=10'...
            '&start=1'];
        data = webread(api);
    
        % 11.jpg~20.jpgとして保存
        for j=1:size(data.items,1)
            imgurl{j} = data.items(j).link;
            savename = fullfile(path,folder,T3.jname{i},[int2str(10+j) '.jpg']);
            try
                websave(savename,imgurl{j},option);
            catch
                delete([savename '*']);
            end
        end
    
        % DL済みのものはフラグを「1」にする
        T3.flag(i)=1;
    end
    

    저장이 끝나면 어명 리스트의 「flag」를 1로 갱신해 둡니다.
    %% 魚名リストの更新
    
    Tnew = [T2;T3];
    writetable(Tnew,filename);
    

    결과



    폴더가 만들어져 저장되었습니다.


    덧붙여 다른 물고기의 사진이 섞여 버렸을 때는…수작업으로 삭제입니다.
    결국 수작업으로는 면할 수 없네요…

    참고문헌



    이하의 사이트를 참고로 했습니다.

    [1] Google Custom Search API를 사용하여 자동 이미지 수집 도구를 만들었습니다.
    htps : // q 룬 ch. 이오 / 엔 토리 S / Q 그럼 H6S mbFt76WPJ

    좋은 웹페이지 즐겨찾기