#그래블 단가의 이미지에서 문자를 꺼내자는 이미지 처리 이야기

9764 단어 TwitterAPI리눅스

이 기사는?


  • 스마트폰용 게임 '그랑블루 판타지'에서는 #그러블 단가 해시태그로 게임 내에서 Twitter에 투고하면 게임 내에서 유리한 캠페인을 실시 중이다.
  • 그러나, 날을 쫓을 때마다 내용은 단가로부터 멀어져 버리고 있는 현실이 있어, 괜찮은 단가가 투고되어 있지 않은 생각이 든다.
  • 화상 처리로 투고 내용을 문자화해, 실제로 확인해 보자.

  • 모니터링 설정 방법



    환경 정보




    품목
    정보


    CentOS
    CentOS Linux release 7.2.1511

    PHP
    PHP 5.5.31 (cli)


    실제 게시



    한 예이지만 게임 내 게시물은 이렇게
    「#그래블 단가」의 해시 태그와 함께 화상 형식으로 투고된다.
    htps : // 라고 해서 r. 코 m/히로키_l←/s타츠 s/760487763296661505

    우선 이미지를 얻자.



    TwitterAPI로 액세스하여 대상 해시태그를 포함한 트윗을 추출했다.
    또한, TwitterAPI 활용에는 twitteroauth를 사용,
    twitteroauth의 도입이나 토큰의 취득 방법에 대해서는 다른 기사를 참조로 한다.
    이번에는 search API을 이용하고 있다.

    get-search-hash.php
    #!/usr/bin/php
    <?php
    require_once("twitteroauth/twitteroauth.php");
    $consumerKey = 'XXXXX';
    $consumerSecret = 'XXXXX';
    $accessToken = 'XXXXX';
    $accessTokenSecret = 'XXXXX';
    
    $twObj = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret);
    $query = array(
                    'q'     =>      '#グラブル短歌 https:// -RT',
                    'count' =>      '100',
                    'include_entities'      =>      'true'
            );
    
    $req = $twObj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json','GET',$query);
    $tweets = json_decode($req);
    
    if (isset($tweets) && empty($tweets->errors)) {
        foreach ($tweets->statuses as $val) {
            echo date('Y-m-d H:i:s', strtotime($val->created_at)) . ' --> ';
            echo $val->text . ' ==> ';
            foreach ($val->entities->media as $media) {
                    echo $media->media_url;
            }
            print "\n";
        }
    } else {
        echo 'つぶやきはありません。';
    }
    
    ?>
    
    

    포인트로서는 아래와 같은 점.
    - 질의(q)에서는 리트윗을 제외하기 위해 -RT옵션을, 그리고 대상의 투고가 아닌 분실물이나 악질적인 유저의 투고 내용을 피하기 위해 '해시태그+URL'로 검색했다.
    - 'include_entities' 쿼리가 true가 아니면 이미지 URL을 가져올 수 없으므로 주의.
    - 이번 글러블 단가에 대해서는 게임 측으로부터의 투고로 위치 설정과 언어 설정을 실시하지 않는 것 같기 때문에, locale와 lan은 설정해서는 안 된다.

    출력 결과는 "트윗 시간 (created_at)", "트윗 된 내용 (text)", "이미지 URL (media_url)"이었다.
    $ ./get-search-hash.php
    2016-08-30 16:06:49 --> #グラブル短歌 https://t.co/Fyq2CHcvdg ==> http://pbs.twimg.com/media/CrFuJO5UAAAkFbb.jpg
    2016-08-30 16:06:46 --> #グラブル短歌 https://t.co/UmtZ9sgXtX ==> http://pbs.twimg.com/media/CrFuIeGVUAAd7m_.jpg
    2016-08-30 16:06:46 --> #グラブル短歌 https://t.co/vuiOa540eW ==> http://pbs.twimg.com/media/CrFuIdtUsAA9Xcq.jpg
    2016-08-30 16:06:45 --> #グラブル短歌 https://t.co/Pd8WNUuEga ==> http://pbs.twimg.com/media/CrFuIUgVIAAtCWa.jpg
    2016-08-30 16:06:45 --> #グラブル短歌 https://t.co/ZKLuKw3OxF ==> http://pbs.twimg.com/media/CrFuIMgUsAAl7hG.jpg
    2016-08-30 16:06:43 --> #グラブル短歌 https://t.co/e0o9vpadfm ==> http://pbs.twimg.com/media/CrFuHvwUIAAiRdP.jpg
    2016-08-30 16:06:43 --> #グラブル短歌 https://t.co/5oBFVwfH6a ==> http://pbs.twimg.com/media/CrFuHtkVIAAk6b3.jpg
    2016-08-30 16:06:41 --> #グラブル短歌 https://t.co/m3bNgsxSBV ==> http://pbs.twimg.com/media/CrFuHQyVYAEDjMb.jpg
    2016-08-30 16:06:39 --> #グラブル短歌 https://t.co/wyDdFh9Oow ==> http://pbs.twimg.com/media/CrFuGo3UkAI18sg.jpg
    2016-08-30 16:06:36 --> #グラブル短歌 https://t.co/0jmCBn287I ==> http://pbs.twimg.com/media/CrFuGDzVMAAS0jv.jpg
    2016-08-30 16:06:34 --> #グラブル短歌 https://t.co/pAW7r5PPkh ==> http://pbs.twimg.com/media/CrFuFivVIAAXoKH.jpg
    

    시간 데이터와 함께 취득할 수 있으므로, DB에 저장해 정기적으로 취득하면 보다 양질의 데이터 계측이 되지만, 여기에서는 실시하지 않는다.
    마음을 부드럽게 wget하여 이미지를 얻기로 결정했다.

    명령 실행
    $ php get-search-hash.php |wget `awk '{print $7}'`
    

    이미지에서 문자를 추출합시다.



    Linux에서 OCR(Optical Character Recognition, 광학 문자 인식)으로 해본다.

    우선 도입
    # yum install tesseract
    # yum install tesseract-langpack-jpn
    $ tesseract --version
    tesseract 3.04.00
     leptonica-1.72
      libgif 4.1.6(?) : libjpeg 6b (libjpeg-turbo 1.2.90) : libpng 1.5.13 : libtiff 4.0.3 : zlib 1.2.7 : libwebp 0.3.0
    

    사용법
    첫 번째 인수: 이미지 파일 이름
    제2 인수:출력 파일명 ※txt 파일명이 되므로 확장자는 불필요
    -l 옵션으로 언어를 지정, 여기서는 일본어로 jpn
    -psm 으로 모드 지정, 통상 가로 쓰기로서 읽지만 -psm 5 라고 하면 세로 쓰기로서 읽는다
     $ tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
    

    그래서 결과의 예



    결과적으로 말하면, 단가라고도 할 수 없는 것뿐이었다.

    샘플 1: 이것은 OK



    [鮒「
    
    ふたりきりそつとだれかをかくすきみ
    ぽ〈はしせんをかくしぐらぷる
    
    」剛一
    
    

    샘플 2: 일본어로 OK



    門丿 } 「
    ほぇほぇほぇほぇほぇほぇ
    ほぇほぇほぇほぇほぇほぇほぇほ
    ぇほぇへぉへぉぇほぇへぉぇほぇへ
    
    帖脚
    
    

    샘플 3:아(찰)



    剛「
    ぞいちゃんはごよういできませんでしたまろ
    
    」剛一
    
    

    결론


  • 예상 이상으로 단가의 체재를 하지 않은 것이 너무 많아 웃어 버렸다.
  • 투고 화상으로부터 텍스트에 컨버트 하는 것은 이번의 화상이라고 거칠게 눈에 띄게 엄격했다.
  • 그렇다고 해도, 만약 내가 운영측의 인간이라면 Twitter에 POST할 때에 DB인가 무언가에 같은 텍스트를 등록해 두고 나중에 참조할 수 있도록 하는, 반드시 운영씨도 먼저 일 를 생각해 만들고 있을 것이다.
  • 그래서 운영씨는 이상한 트윗에 당황하지 않고, 올바르게 적절하게 단가를 선택해 유저 선물을 보내 주었으면 한다.


  • 이상

    좋은 웹페이지 즐겨찾기