프롤로그

자동화 스케쥴링을 윈도우에서 제공하는 스케쥴러를 이용하여 여러번 시도해 보았으나 내가 마음먹은대로 동작시키는데 실패를 하고, 기억 저편에 넣어 두었다.

그러던차에, Cron이라는 프로그램을 접하게 된 후, 자동화 프로그램을 스케쥴링 하는데 성공하였다.

그래서 이번에는 Cron이라는 프로그램 설치 및 간단한 사용법을 알아보기로 한다.

프로그램 다운로드

프로그램 다운로드를 위해서는 다음 웹페이지를 방문하여 다운 받으면 된다.

http://www.nncron.ru/download.shtml

 

nnSoft: download

com_ports.spf 1k 12 Dec 2008 Tests the specified COM-port and returns TRUE if the port is free or returns FALSE if the port is busy (used by some devices or applications). crc32.spf 1k 12 Dec 2008 Generates a string, that contains checksum (crc32) of a spe

www.nncron.ru

아래 발췌한 웹페이지 그림에서와 마찬가지로 'nncronlt117.exe' 파일을 다운받으면 된다(참고로 본인은 Win10 환경이다).

다운로드 완료 후 그 파일을 실행한다.

Cron 파일 다운로드 완료

실행을 하면 다음과 같이 언어를 선택할 수 있는 창이 뜬다. '영어'와 '러시아어' 2가지만 지원한다.

그래서 '영어'를 선택하면 된다.

Cron 파일 설치 - 언어선택

그 다음 화면에서 동의('Agree')를 선택 후 진행.

Cron 파일 설치 - Agree

인스톨 옵션 창에서 현재 상태 그대로 진행을 하기위해 'Next'를 누른다.

Cron 파일 설치 - 인스톨 옵션

경로를 별도로 지정하지 않고 'Install'을 눌러 다음 단계로 진행.

Cron 파일 설치 - 경로지정

인스톨이 완료 되면 'Close'를 눌러 작업을 마친다.

Cron 파일 설치 - 완료

Cron 프로그램 실행

프로그램 설치 경로를 변경하지 않고 프로그램을 정상적으로 설치 하였다면, "C:\Program Files (x86)\cron" 경로에 다음과 같이 설치된 파일들을 확인 할 수 있다.

Cron_설치폴더

Cron 프로그램을 실행하는 방법은 exe 파일을 실행하지 않고, cron.tab 파일을 수정하는 것으로 실행이 가능하다. cron.tab을 수정하기 위해서는 편집기로 파일을 열어 수정을 하는데, 프로그램을 '권리자 권한으로 실행' 실행해야지만 파일저장이 가능하다.

먼저, Win10에서 Search 메뉴를 이용하여 wordpad를 '권리자 권한으로 실행'을 한다.

워드패드_권리자권한으로실행

'관리자 권한으로 실행' 후에 '파일' → '열기'를 선택 하여, "C:\Program Files (x86)\cron" 경로에서 cron.tab 파일을 열어서 수정을 하면 된다.

워드패드에서 cron.tab 파일 열기

Cron.tab 파일을 열면 하기와 같은 내용이 들어 있는 것을 확인할 수 있다.

cron.tab 파일 내용

Cron 사용법

Cron Format은 매우 간단하다. 다음은 nnCron LITE Help에서 발췌한 내용이다(Cron이 설치된 폴더의 doc\help.chm을 참고).

Cron Format
Cron 예제

위에서 보듯 '분, 시간, 날짜, 월, 요일'을 설정해서 특정 프로그램을 실행할 수 있게 만드는 것이다.

위에서 워드패드로 열어본 Cron.tab 파일의 내용을 보면 이해가 쉽다.

#CRONTAB FILE 
# Classic crontab format:
# Minutes Hours Days Months WeekDays Command

#*/15 8-16 * * 1-5 checkmail.exe

위에 마지막 줄을 보면 '#'으로 해당 라인이 실행 되지 않도록 막혀 있다. 그 내용은 Cron Format과 Example을 참고로 해석을 해보면 다음과 같이 해석할 수 있다.

*/15 8-16 * * 1-5 checkmail.exe

매 15분 마다, 8시~16시 사이에만, 매일, 매월, 월~금요일에 checkmail.exe 파일을 실행하라는 것이다.

이와 같이 우리는 워드패드를 '관리자 권한으로 실행'하여 Cron.tab 파일에 특정 프로그램을 스케쥴링하여 실행 할 수 있다.

하기와 같이 0분, 9시, 매일, 매월, 월~금요일에 Python 파일을 실행하여 findgoodprice_naver.py를 컴파일하고 실행 하도록 셋팅을 하여 테스트를 해보았다. 

0 9 * * 1-5 python D:\03_Study\02_FastCampus\02_Python\04_work\findgoodprice_naver.py

내가 원한바와 같이 정확히 동작하는 것을 확인 할 수 있었다.

Excel 파일에 파이썬 크롤링으로 데이터를 저장한 후 다른 이름으로 저장을 할 필요가 생겼다.

하기 예와 같이 openpyxl로 다른 이름을 저장하는 것은 매우 간단했다.

from openpyxl import load_workbook

wb = load_workbook('D:/test1.xlsx')
wb.save('D:/test2.xlsx')
wb.close()

단지 저장할때 이름만 바꾸면 된다.

그런데 단순한 텍스트만 있는 엑셀파일에서는 크게 문제가 없지만, 여러가지 데이터가 복잡하게 삽입된 엑셀파일에서는 문제가 발생한다.

본인의 경우에는 다음과 같은 문제점이 발생했다.

당췌 무슨 소린지 모르겠다.

한참 고민을 하다가... 문득 한 가지 생각이 떠 올랐다.

그래서, 작은 발상의 전환을 해보았다.

먼저, 파일을 복사 하여 다른 이름으로 저장하고, 그 파일에 필요한 데이터를 openpxy를 이용해 넣는거다.

그렇게 간단한 방법이 있었다.. -_-;;

다음과 같이 코드를 입력하면 파일을 다른 이름으로 복사할 수 있다.

import os
import shutil
import datetime

shutil.copy('D:/test1.xlsx', 'D:/test1.xlsx')

역시... 쉬운 방법은 따로 있었다.

3월을 초입에 두고 다가올 봄을 맞이하기 위해 새로운 마음가짐으로(?) 지출 내역을 전체적으로 보던 중에, 핸드폰 요금 내역서를 보게 되었다.

그런데, 그 내역 중에 유료부가서비스가 하나 떡하니 있다. 이게 뭐지??

 

 

'로그인플러스'라는 듣지도 보지도 못한 부가서비스가 언제 가입이 된거지???

휴대폰 '114'로 전화를 걸어서 U+ 상담사에게 이 부가서비스에 대해 문의를 했다.

그 결과 U+에서 제공하는 부가서비스는 아니기에, U+를 통해서 가입한 부가서비스는 아니라고 한다.

뜻밖에, 상담사분께서 자신의 경험담을 친절히 알려주셨다. 비슷한 경험이 있었는데, 인터넷 광고성 글 or 본인확인 인증창에서 '전체 동의'를 클릭하여 강제가입이 된적이 있었다고 말이다. 아마도 나도 그렇게 강제 가입이 되었을 거라고 말이다.

그러면서 친절하게 '로그인플러스' 고객센터 전화번호를 문자로 안내해주었다.

U+ 상담사가 확인을 해보니 2019년 5월에 가입이 되었다고 한다. 지금이 2020년 2월이니, 9개월간 부지불식 간에 '로그인플러스' 부가서비스 금액 \1,100원씩을 꼬박꼬박 내고 있었던 것이다.

U+ 상담사와 통화를 끊고, 문자에 적힌 전화번호로 전화를 하니 '로그인플러스' 상담사가 전화를 받는다.

우선, 나도 모르는 사이에 가입이 되었는데, 어떻게 가입이 되었는지 알 수 있겠느냐 문의를 했더니, 정보제공 동의를 위해 전화번호와 이름을 먼저 물어본다.

정보제공 동의를 했더니, 상담사가 잠시 뒤 2019년 5월 x일 xx시 xx 분에 xx시네마 광고글을 클릭하면서, 본인인증을 시도할때, 동의를 체크하면서 가입이 되었다고 답했다.

아마도, 영화관 이벤트에 응모하면서 본인확인 인증창에서 '전체 동의'를 클릭하여 이런 일이 발생한듯 하다. -_-;

그래서, 상담사에게 이용 내역이 있는지를 문의 했더니, 그 때 이후로 한 건도 없다고 말한다.

그래서 또 물었다. 이용 내역이 없으니 환불 할 수 있지 않냐고.

그랬더니 환불 가능하다며, 환불 받을 은행 계좌와 예금주명을 알려 달라고 한다. 9개월 동안 납부한 \9,900을 내일 오후에 입금해주겠다면서 말이다.

아마도 이런일이 비일비재 하기때문에, 이렇게 쉽게 환불을 해주는 듯한 느낌이었다.

환불이 잘 되었는지는 내일이 되어야 알겠지만, 여튼... 부지불식 간에 광고성 이벤트에 응모했다가, 나와 같은 상황에 놓인 분들께 참고하라고 글을 남겨본다.

근데, 이런 식으로 소비자가 인지하지 못하도록 교묘하게 가입을 시키고, 그 이후에 가입에 대한 정기적인 문자나 알림 없이, 소액결제로 사람들의 주머니를 터는 회사들은 법적으로 처벌 해야 되지 않나 생각이든다.

아마도, 귀찮아서 그냥 해지하고나서, 환불 받지 않는 사람들도 많을 텐데... 이런식으로 돈을 버는건 좀 아니지 않나???

 

 

Selenium library는 웹 크롤링을 할때 필수적인 library이다.

특별히 send_keys()함수를 이용하여 키보드의 키를 PC에 전달 할 수 있는데, 이때 사용가능한 값들은 다음과 같다.

Kyes.ENTER, Keys.ARROW_DOWN, Keys.ARROW_LEFT, Keys.ARROW_RIGHT, Keys.ARROW_UP,
Keys.BACK_SPACE, Keys.CONTROL, Keys.ALT, Keys.DELETE, Keys.TAB, Keys.SPACE,
Keys.SHIFT, Keys.EQUALS, Keys.ESCAPE, Keys.HOME, Keys.INSERT, Keys.PAGE_UP,
Keys.PAGE_DOWN,Keys.F1, Keys.F2, Keys.F3, Keys.F4, Keys.F5, Keys.F6, Keys.F7,
Keys.F8, Keys.F9 Keys.F10, Keys.F11, Keys.F12

예를 들어 Enter key를 전달하고 싶다면, send_key(Keys.ENTER)라고 사용하면 된다.

업무 상 Outlook2016에 있는 e-mail을 윈도우 탐색기에 끌어다 놓은 후 그 파일을 더블 클릭하여 열었더니, 다음과 같이 아무 내용이 없는 현상이 발생 했다.

한참 검색을 하다가 다음과 같이 Outlook2016 update를 실시하면 문제가 해결 되는 것을 확인하였다.

- 64Bit 경우 아래 링크의 패치 적용(해당 페이지에서 Download 클릭)

https://www.microsoft.com/en-us/download/details.aspx?id=54546

 

Update for Microsoft Outlook 2016 (KB3141453) 64-Bit Edition

Microsoft has released an update for Microsoft Outlook 2016 64-Bit Edition. This update provides the latest fixes to Microsoft Outlook 2016 64-Bit Edition. Additionally, this update contains stability and performance improvements.

www.microsoft.com

- 32Bit 경우 아래 링크의 패치 적용(해당 페이지에서 Download 클릭)

https://www.microsoft.com/en-us/download/details.aspx?id=54572

 

Update for Microsoft Outlook 2016 (KB3141453) 32-Bit Edition

Microsoft has released an update for Microsoft Outlook 2016 32-Bit Edition. This update provides the latest fixes to Microsoft Outlook 2016 32-Bit Edition. Additionally, this update contains stability and performance improvements.

www.microsoft.com

업데이트 패치를 적용하니 정상적으로 내용이 표시되는 것을 확인 할 수 있다.

 

 

Overview

WMware Workstation Pro를 이용하여 우분투를 인스톨하였다.

하지만, Host PC인 Window10에서 사용 하던 파일을 VMware의 우분투로 파일로 사용하려니 매번 USB를 사용하는 것도 어려운 일이었다.

그래서 구글링을 하다 보니 파일 공유로 쉽게 이 문제를 해결할 수 있다는 것을 뒤늦게 발견했다.

그 방법은 다음과 같다.

 

Host PC에서 공유 폴더 설정

먼저 Host PC인 Window10에서 공유할 폴더를 하나 만들고 공유 설정을 진행하면 된다.

   1. 공유할 폴더를 선택 후 오른쪽 클릭 그리고 속성으로 진입

   3. 공유 탭으로 이동 후 고급 버튼을 클릭

   6. 선택한 폴더 공유 체크 박스를 체크 하고 권한 버튼을 클릭

   7. 사용권한을 모든권한 허용으로 체크 한 후 적용 버튼과 확인 버튼을 차례로 클릭한다.

 

VMware에서 공유폴더 설정

우분투 구동 전 설정

  1. VMware에서 우분투를 구동하기 전에 메뉴바에서 VM을 선택하고, 그 다음 Settings를 선택한다. 

  2. Options 탭을 선택 후 Shared Folders를 선택 그리고 나서 Folder sharing을 Always enabled로 선택한다.

  3. Floders에서 Add를 누르면 Add shared Folder Wizard가 뜬다. Wizard 창에서 Next를 누른다.

  5. Host path에서 Browser를 눌러서 Host PC 공유 폴더 설정에서 작업한 폴더 경로를 여기서 동일하게 선택하면 된다. Name은 원하는 이름으로 설정하면 된다. 그리고 Next를 누른다.

  6. Enable this share의 체크박스에 체크를 하고 Finish 버튼을 눌러 종료 한다.

  7. OK 버튼을 눌러 설정을 모두 마무리 한다.

우분투 구동 후 설정

  1. 로그인 하기 전에, 우분투를 구동 시킨 탭에서 오른쪽 클릭 후 Reinstall VMware Tools를 선택한다.

  2. 화면 하단에 로그인을 하고 virtual CD drive를 Mount하고 Terminal을 띄워서 tar로 압축 파일을 풀은 후 vmware-install.pl 파일을 실행하라는 문구가 화면 하단에 뜬다. 이것을 확인하고 로그인을 한다.

  3. 로그인 후 파일 탐색기를 열면 CD drive에 VMware Tools가 Mount가 되어 있고, 그곳에 VMwareTools-10.3.10-13959562.tar.gz이 존재하는 것을 확인 할 수 있다. 바로 이 tar.gz 파일을 압축을 풀어야 한다.

4. Terminal을 실행하여 다음과 같은 경로를 타고 tar.gz 파일이 있는 곳 까지 이동을 하여, 압축을 해제한다.

mskim@ubuntu:~$ cd ..
mskim@ubuntu:/home$ cd ..
mskim@ubuntu:/$ cd media
mskim@ubuntu:/media$ ls
floppy  floppy0  mskim
mskim@ubuntu:/media$ cd mskim
mskim@ubuntu:/media/mskim$ ls
VMware Tools
mskim@ubuntu:/media/mskim$ cd VMware\ Tools
mskim@ubuntu:/media/mskim/VMware Tools$ ls
manifest.txt     VMwareTools-10.3.10-13959562.tar.gz  vmware-tools-upgrader-64
run_upgrader.sh  vmware-tools-upgrader-32
mskim@ubuntu:/media/mskim/VMware Tools$ cp VMwareTools-10.3.10-13959562.tar.gz ~/.
mskim@ubuntu:/media/mskim/VMware Tools$ cd ~
mskim@ubuntu:~$ ls
Desktop
Documents
Downloads
examples.desktop
gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf
gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
Music
Pictures
Public
Templates
u-boot
Videos
VMwareTools-10.3.10-13959562.tar.gz
mskim@ubuntu:~$ tar xzf VMwareTools-10.3.10-13959562.tar.gz
mskim@ubuntu:~$ ls
Desktop
Documents
Downloads
examples.desktop
gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf
gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
Music
Pictures
Public
Templates
u-boot
Videos
VMwareTools-10.3.10-13959562.tar.gz
vmware-tools-distrib
mskim@ubuntu:~$ cd vmware-tools-distrib
mskim@ubuntu:~/vmware-tools-distrib$ ls
bin  caf  doc  etc  FILES  INSTALL  installer  lib  vgauth  vmware-install.pl

  5. vmware-install.pl 파일을 위에서 제일 마지막에 확인 할 수 있었다. 이것을 쉘로 실행을 한다. 실행 후 중간 중간 Yes/No를 입력하거나 또는 경로를 입력을 해주어야 한다. 본인은 모두 Yes로 했던거 같고, 경로는 예제로 나와있는 경로와 동일하게 입력을 하였다.

mskim@ubuntu:~/vmware-tools-distrib$ sudo ./vmware-install.pl
The installer has detected an existing installation of open-vm-tools packages 
on this system and will not attempt to remove and replace these user-space 
applications. It is recommended to use the open-vm-tools packages provided by 
the operating system. If you do not want to use the existing installation of 
open-vm-tools packages and use VMware Tools, you must uninstall the 
open-vm-tools packages and re-run this installer.
The packages that need to be removed are:
open-vm-tools
Packages must be removed with the --purge option.
The installer will next check if there are any missing kernel drivers. Type yes
if you want to do this, otherwise type no [yes] yes

INPUT: [yes]

Creating a new VMware Tools installer database using the tar4 format.

Installing VMware Tools.

In which directory do you want to install the binary files? 
[/usr/bin] /usr/bin

INPUT: [/usr/bin]

What is the directory that contains the init directories (rc0.d/ to rc6.d/)? 
[/etc] /etc

INPUT: [/etc]

What is the directory that contains the init scripts? 
[/etc/init.d] /etc/init.d

INPUT: [/etc/init.d]

In which directory do you want to install the daemon files? 
[/usr/sbin] /ure/sbin

INPUT: [/ure/sbin]

The path "/ure/sbin" does not exist currently. This program is going to create 
it, including needed parent directories. Is this what you want? [yes] no

INPUT: [no]

In which directory do you want to install the daemon files? 
[/usr/sbin] /usr/sbin

INPUT: [/usr/sbin]

In which directory do you want to install the library files? 
[/usr/lib/vmware-tools] /usr/lib/vmware-tools

INPUT: [/usr/lib/vmware-tools]

The path "/usr/lib/vmware-tools" does not exist currently. This program is 
going to create it, including needed parent directories. Is this what you want?
[yes] yes

INPUT: [yes]

In which directory do you want to install the documentation files? 
[/usr/share/doc/vmware-tools] /usr/share/doc/vmware-tools

INPUT: [/usr/share/doc/vmware-tools]

The path "/usr/share/doc/vmware-tools" does not exist currently. This program 
is going to create it, including needed parent directories. Is this what you 
want? [yes] yes

INPUT: [yes]

The installation of VMware Tools 10.3.10 build-13959562 for Linux completed 
successfully. You can decide to remove this software from your system at any 
time by invoking the following command: "/usr/bin/vmware-uninstall-tools.pl".

Before running VMware Tools for the first time, you need to configure it by 
invoking the following command: "/usr/bin/vmware-config-tools.pl". Do you want 
this program to invoke the command for you now? [yes] yes

INPUT: [yes]


You have chosen to install VMware Tools on top of an open-vm-tools package.  
You will now be given the option to replace some commands provided by 
open-vm-tools.  Please note that if you replace any commands at this time and 
later remove VMware Tools, it may be necessary to re-install the open-vm-tools.

The file /usr/bin/vmware-hgfsclient that this program was about to install 
already exists.  Overwrite? [no] yes

INPUT: [yes]

The file /sbin/mount.vmhgfs that this program was about to install already 
exists.  Overwrite? [no] yes

INPUT: [yes]

The file /usr/bin/vmhgfs-fuse that this program was about to install already 
exists.  Overwrite? [no] yes

INPUT: [yes]

Initializing...


Making sure services for VMware Tools are stopped.

Stopping VMware Tools services in the virtual machine:
   VMware User Agent (vmware-user):                                    done
   Unmounting HGFS shares:                                             done
   Guest filesystem driver:                                            done


The module vmci has already been installed on this system by another installer 
or package and will not be modified by this installer.

The module vsock has already been installed on this system by another installer
or package and will not be modified by this installer.

The module vmxnet3 has already been installed on this system by another 
installer or package and will not be modified by this installer.

The module pvscsi has already been installed on this system by another 
installer or package and will not be modified by this installer.

The module vmmemctl has already been installed on this system by another 
installer or package and will not be modified by this installer.

The VMware Host-Guest Filesystem allows for shared folders between the host OS 
and the guest OS in a Fusion or Workstation virtual environment.  Do you wish 
to enable this feature? [yes] yes

INPUT: [yes]

The vmxnet driver is no longer supported on kernels 3.3 and greater. Please 
upgrade to a newer virtual NIC. (e.g., vmxnet3 or e1000e)


Skipping configuring automatic kernel modules as no drivers were installed by 
this installer.


Skipping rebuilding initrd boot image for kernel as no drivers to be included 
in boot image were installed by this installer.

The configuration of VMware Tools 10.3.10 build-13959562 for Linux for this 
running kernel completed successfully.

Enjoy,

--the VMware team

mskim@ubuntu:~/vmware-tools-distrib$ 

 

이제 모든 설정은 완료가 되었다.

 

Host PC인 Win10에서 공유 폴더 확인 하기

공유 폴더는 처음에 "Host PC에서 공유 폴더 설정" 부분에서 우리가 설정했던 공유 폴더가 되겠다.

 

VMware의 우분투에서 공유 폴더 확인 하기

공유 폴더는 다음과 같이 "Computer → mnt → hgfs" 안에 우리가 이전에 "VMware에서 공유펄더 설정" 항목에서 "우분투 구동 전 설정" 부분의 5번 항목에서 공유 폴더이름을 만들었던 그 이름 그대로 폴더가 존재하는 것을 알수 있다.

 

여기서 추가로, 이 경로까지 들어오기가 만만하지 않기 때문에 이 폴더를 Desktop 폴더로 복사하도록 하겠다.

mskim@ubuntu:/mnt/hgfs$ cp -r Sharefolder ~/Desktop

그러면 바탕화면에 공유 폴더가 복사가 되어, 공유 폴더를 접근하기도 훨씬 용이해 진다.

- 끝

ai-makers-kit-master\python3 폴더 안에는 KT에서 제공하는 예제가 있다.

Python3 폴더 안에 md 파일을 보면 다음과 같은 설명이 있다.

https://github.com/gigagenie/ai-makers-kit/tree/master/python3

 

gigagenie/ai-makers-kit

GiGA Genie AI Makers Kit for Raspberry Pi. Contribute to gigagenie/ai-makers-kit development by creating an account on GitHub.

github.com

GiGA Genie AI Makers Kit을 이용하기 위한 Python 3버전 소스 코드입니다.

1. Prerequisites
Python 3.x를 지원하며 아래 Python 라이브러리 추가 설치가 필요합니다.

gRPC
PyAudio
GiGA Genie 음성호출어('기가지니', '지니야' 등) 이용을 위해 GiGA Genie에서 제공하는 shared library와 Python extension이 필요합니다.

libkwscmdapi.so (Raspberry Pi용)
ktkws Python extension module
2. Quick Start
a) 사용자 인증정보 받기
  AI Makers Kit 이용을 위해서는 KT APILINK 사이트에서 개발자 등록 후
  인증정보(clientid, client key, clientsecret)를 먼저 발급 받아야 합니다.

b) Python3 버전 추가 라이브러리 설치
   $ sudo easy_install3 pip
   $ sudo easy_install3 install/ktkws-1.0.1-py3.5-linux-armv7l.egg
   $ sudo apt install portaudio19-dev
   $ sudo pip3 install grpcio grpcio-tools
   $ sudo pip3 install pyaudio

c) 사용자 인증 정보 입력
   [user_auth.py 파일에 인증정보 입력]
      아래 정보를 기가지니 포털에서 발급 받은 클라이언트 키 정보로 업데이트 하세요.
   [client]
      clientid: YOUR_CLIENT_ID
      clientkey: YOUR_CLIENT_KEY
      clientsecret: YOUR_CLIENT_SECRET

d) 예제 실행(ex1 ~ ex9)
   $ python3 ex1_kwstest.py

3. Usage
a) 기본이 되는 단위 기능별 사용 예제
  ex1) 음성 호출(Keyword Spotting) 이용(code 참조)

import ktkws

ktkws.init(KWSMODELDATA)   # ../data/kwsmodel.pack 이용
ktkws.start()
ktkws.set_keyword(KWSID)   # 0: 기가지니, 1: 지니야(default), 2: 친구야, 3: 자기야
ktkws.detect(AUDIOSTERAM)  # AUDIOSTREAM: PCM 16000Hz, mono, LINEAR16 LE
# ktkws.detect() return value가 1이면 detect
   ex2-6) 음성인식/대화/음성합성 API 이용(code 참조)

gRPC 서비스 정의 : ../data/gigagenieRPC.proto
API
getVoice2Text : 음성인식(Speech-to-text)
getText2VoiceUrl : 음성합성(Text-to-speech) wave file url로 전달
getText2VoiceStream : 음성합성(TTS)을 stream data로 전달
queryByText : Text에 대한 대화해석 결과(기가지니 Dialog Kit 참조)
queryByVoice : STT한 결과에 대한 대화해석 결과(기가지니 Dialog Kit 참조)
  ex7-9) 복합 예제(음성/대화/TTS/Button)

  기타) 기능파일

user_auth.py : 사용자 인증 구현
MicrophoneStream.py : 마이크 스트림 구현
b) gkit을 이용한 예제
sample_keyword.py : 음성호출을 이용한 음성인식/음성합성 이용 예제
sample_button.py : 버튼을 이용한 음성인식/음성합성 이용 예제
sample_led.py : 다양한 애니메이션 효과를 준 LED 이용 예제
main_demo.py : 음성호출/버튼을 함계 이용한 음성인식/음성합성 이용 예제(LED 사용 포함)
sample_keyword.py
# gkit 모듈 준비
import gkit

# KWS 모델데이터를 준비
gkit.kws_start()
# 음성호출에 사용할 키워드 세팅: 지니야(default), 기가지니, 친구야, 자기야
gkit.kws_setkeyword('기가지니')
# kws_detect() 리턴값이 1 이면 음성 호출어가 감지된 것임
if gkit.kws_detect() == 1:
    print ('detected')
sample_button.py
import gkit

# 버튼이 눌러졌을 때 실행되는 callback
def callback():
    print ("Button was pressed")

# 버튼 생성 후 callback 등록
gkit.get_button().on_press(callback)
sample_led.py
import gkit

# LED 객체 생성
led = gkit.get_led()

# LED로 나타낼 상태 애니메이션 설정
led.set_state(gkit.LED.BLINK)
"""
사용 가능한 LED 상태 값
    gkit.LED.OFF
    gkit.LED.ON
    gkit.LED.BLINK
    gkit.LED.BLINK_3
    gkit.LED.BEACON
    gkit.LED.BEACON_DARK
    gkit.LED.DECAY
    gkit.LED.PULSE_SLOW
    gkit.LED.PULSE_QUICK
"""
main_demo.py
import gkit

# 음성호출이나 버튼이 눌러졌을 때 실행되는 callback
def myservice():
    """ Do something: your service ... """
    # for example : Speech-to-text
    stt_text = gkit.getVoice2Text()

# 클라이언트 키 정보 설정
gkit.set_clientkey(CLIENT_ID, CLIENT_KEY, CLIENT_SECRET)

# Detector 객체 생성(음성호출, 버튼에 대한 detection 처리)
detector = gkit.KeywordDetector()
try:
    detector.start(callback = myservice)
except:
    detector.terminate()
Enjoy with AI Makers Kit !

 

예제를 실행하기 전에 다음과 같이 위의 md 파일의 설명 중에 하기 1번 항목에 대해서 먼저 작업이 필요하다.

1. Prerequisites
Python 3.x를 지원하며 아래 Python 라이브러리 추가 설치가 필요합니다.

gRPC
PyAudio
GiGA Genie 음성호출어('기가지니', '지니야' 등) 이용을 위해 GiGA Genie에서 제공하는 shared library와 Python extension이 필요합니다.

libkwscmdapi.so (Raspberry Pi용)
ktkws Python extension module

즉, 설명과 같이 libkwscmdapi.so와 ktkws Python extension module 라이브러리를 설치해야 한다.

그런데 어떻게 설치하는지에 대한 설명이 없다.... !!!

그래서 일단 2번의 하기 항목을 먼저 실행한다. 우선, ai-makers-kit-master\python3 폴더에서 다음의 명령어를 실행한다.

b) Python3 버전 추가 라이브러리 설치
   $ sudo easy_install3 pip
   $ sudo easy_install3 install/ktkws-1.0.1-py3.5-linux-armv7l.egg
   $ sudo apt install portaudio19-dev
   $ sudo pip3 install grpcio grpcio-tools
   $ sudo pip3 install pyaudio

첫번째 행을 다음과 같이 실행.

두번째 행을 다음과 같이 실행.

 

세번째 행을 다음과 같이 실행.

네번째 행을 다음과 같이 실행.

다섯번째 행을 다음과 같이 실행.

자, 이제 모든 설치는 완료가 되었고, 실제 예제를 다음과 같이 실행을 했다. 물론 Python3 폴더 안에 있는 예제이다.

하지만, libkwscmdapi.so 파일이 없어서 Error가 발생했다. libkwscmdapi.so 파일은 하기와 같이 ai-makers-kit-master/lib에 위치해 있다.

libkwscmdapi.so 파일의 경로를 ld.so.conf 파일에 등록을 해주어야 한다.

가장 간단한 방법은 다음의 방법이다.

pi@raspberrypi:~$ LD_LIBRARY_PATH=/home/pi/ai-makers-kit-master/python3/example_apps
pi@raspberrypi:~$ export LD_LIBRARY_PATH

하지만, 매번 cmd창을 새로 열때 마다 설정을 해주어야 하는 단점이 있다.

그래서, 한번만 셋팅하면 끝나는 방법을 찾아야한다.

그럼 다음 기회에....

 

라즈베리파이를 처음 부팅하면, 한글로 표시되는 것들은 모두 사각형으로 깨져서 보인다.

이것은 라즈베리파이 보드에 한글 폰트가 없기 때문이라고 한다. 그래서 한글 폰트를 다음 명령어를 이용해서 인스톨하면 해결된다.

sudo apt install fonts-nanum fonts-nanum-extra

그리고 나서 reboot 하면 한글이 정상적으로 표시될 것이다.

이번에는 키보드 자판을 이용한 한글 입력을 이용하기 위해 fcitx-hangul을 인스톨 해준다.

sudo apt-get install fcitx-hangul

인스톨이 완료되면 하기와 같이 Raspberry Pi Configuration을 선택한다.

그리고 나서 Localisation에서 Set Locale...을 선택한다.

그리고나서, Lagnuage와 Country 그리고 Character Set을 하기와 같이 설정해준다.

OK를 누르고 나면 재부팅하라는 메세지가 나온다. 재부팅을 해주면 된다.

이제 한글을 입력하기 위해서 왼쪽상단에 라즈베리파이 메뉴 버튼을 누르고, "시스템도구→Fcitx"을 순서대로 눌러주면 된다.

그러면, 오른쪽 상단에 키보드 모양 아이콘이 생긴다. 한글을 입력하고자 할때 해당 아이콘을 눌러 태극모양으로 변경하면 한글입력이 정상적으로 동작한다.

인터넷창을 띄우고 키보드 모양 아이콘을 눌렀을때, 하기와 같이 한글입력이되는 것을 확인 할 수 있다.

- 끝

+ Recent posts