2017년 2월 22일 수요일

Unity3D에서 uGUI Button 을 동적으로 생성할 때, 클릭 이벤트 추가 하는 방법

uGUI 로 동적 버튼을 생성할 때 코드로 클릭 이벤트를 추가하려면,
아래와 같은 방법으로 onClick 이벤트를 추가한다.


_spawnedButton.GetComponent<Button>().onClick.AddListener(delegate() { 게임오브젝트.GetComponent<컴포넌트 클래스 이름>().실행할 함수(); });

2017년 2월 21일 화요일

Unity3D 용 Json Parser - JsonUtility(Unity3D 5.3 Later), JsonObject

Unity3D로 Json 파일을 좀 사용할 일이 있어서 알아보았다.

그 동안 기획일 하면서 데이터만 만들었지,
직접 뭔가를 해볼일은 없었는데 이참에 해보는 것으로...

-------------

Unity3d Json Parser를 검색해보면

- JsonFX (가장 편하다는 평인데, 사이트 접속 불가. DLL 은 구했지만 스킵.)
- LitJson (iOS 이슈 게시물이 상당히 많다.. 위험)
- MiniJson (EastFever 님의 추천!!)
- JsonObject (직접 테스트 해본 것. 문제 없음)

등이 나오는데

일단은 JsonObject 를 사용해봤다.
이유는 Unity3D Asset Store에 등록되어있는데다가 무료고,
다들 잘 사용하고 있는 것 같아서 선택했다.

다운로드 및 레퍼런스 위키는 아래 주소에서 확인 가능하다.
http://wiki.unity3d.com/index.php/JSONObject#Download

나는 간단하게 읽고 쓰기만 할 생각이라서 뭐 다른건 지원된다고 해도 그러려니 상태였다.!
당연히 유니티 5.5에서도 문제 없었기에 이걸로 써야지~ 하고 결정!!!


-------------


그.. 그런데... 두둥!
조금 더 알아보다 보니,

유니티 5.3 부터 JsonUtility 라는 내장 API 가 생긴 것이다. 두두둥..!!

(몰랐다니, 아니 대수롭지 않게 보고 흘려서 까먹은듯,
릴리즈 블로그 읽기를 소홀히 한 제 탓입니다. T_T)

그래서 바로 쓱쓱 테스트 !!!

일단 레퍼런스 문서를 보자.
https://docs.unity3d.com/ScriptReference/JsonUtility.html


# ToJson 사용 방법 (코드 예제)


using UnityEngine;

[System.Serializable]
public class MyJsonClass
{
    // 사용할 Json Key 를 정의
    public int level;
    public float timeElapsed;
    public string playerName;

}

public class JsonUtilityTest : MonoBehaviour {

    private void WriteJSon() {
        MyJsonClass myObject = new MyJsonClass();
        myObject.level = 5;
        myObject.timeElapsed = 14.75f;
        myObject.playerName = "Kpaper ToJson Test";

        string json = JsonUtility.ToJson(myObject);
        Debug.Log(json);
    }
}

# FromJson 사용 방법. (더 자세한 내용은 위의 레퍼런스 사이트보면 잘 나와 있다.)


JsonUtility.FromJson<MyJsonClass>(json);

------

딱 내가 원하는 것만 간단하게 쓸 수 있어서 좋았다.
손쉽게 시리얼라이즈!

아무래도 엔진에 종속되서 개발을 하다 보니,
외부 에셋을 쓰기 보다는 내장된게 좋을 것 같아서 방향 선회!를 하는 것으로 결론...

끝!

P.S : 교훈. 멀리서 찾지 말자 -_-;;;

-----------------------------------------------------

[내용 업데이트]

으헉!!
JsonUtility는 Json 타입 중 Property Type 에는 사용할 수 있는데, Dictionary Type 은 사용할 수 없다.

구글 선생님한테 물어봐도 고통, 포럼 유저들도 다 같이 고통 중이었다.
(언젠간 업데이트 되지 않을까 하고 헛된 희망을 가져봤다.)

하지만 계속 구글링 해본 결과, 다행히 구글 선생님은 일본 블로그 하나를 추천해주셨다.
http://kou-yeung.hatenablog.com/entry/2015/12/31/014611
(杏仁さん、ありがとうございます。 T_Td)

ISerializationCallbackReceiver 를 이용하는 방법이다.

이걸로 거의 해결! (왜 거의인지는 나중에 다시 포스팅 하겠다. ㅜㅜ)

P.S 2 : 그냥 평범하게 선구자분들에게 추천 받은 것으로 할 걸, 왜 그랬을까. ㅠ_ㅠ...

<끝>

2017년 2월 17일 금요일

MS Office for Mac (Office 365 구독) 드디어 MacBook Pro TouchBar 지원 업데이트 배포

드디어 맥용 오피스에서 터치바를 지원한다.

터치바를 지원하는 것을 애타게 기다렸던 것은 아닌데...
(적어도 MS의 생산성 제품을 이용할 때는 터치바가 너무도 불편하여... ㅠㅠ 펑션키 돌려줘!)

그래도 MS가 이에 대해서 개선을 해준다면 그래도 좋아지지 않을까 하여,
업데이트 예정 기사를 보고 나름 기다리고 있었는데...

드디어 오늘(어제?) 일반에도 릴리즈되었다. (미국시간으로 2/16)


<오피스 제품중 하나를 실행해서 업데이트 확인을 눌러준다.>

현재 설치 중이라서, 설치하고 소감을 간단히 업데이트 해보면,


두근두근





소감.

서식 관련 기능들이 추가되고 눈에 잘 띄게 되었다.

엑셀 F2와 F4를 엄청 사용하는데, 이건 아예 사라져버렸다.

엑셀보다는 파워포인트 쪽이 더 쓸만한 것 같다. 리본메뉴의 일부가 터치바에도 클로닝되어 보여지는 느낌.

터치바 맞춤 설정이 가능할 것 같은데, 메뉴를 찾을 수 없다. 추후 업데이트 될려나? ㅜㅜ

뭔가 기대를 많이 했던것은 아닌데, 당장 쓰는데는 아직 별 차이가 없다.

맥용 오피스는 윈도우에 비해 단축키가 적다는 느낌이었는데, 터치바가 그 자리를 대신할 수 있을지는 아직도 모르겠다.

MS 제품군은 역시 일반 키보드 연결해서 쓰는 편이 나을지도 모르겠다.

작업 편의상 맥에서 MS 오피스를 쓰고 있긴 한데, 역시 오피스는 윈도우에서 써야겠다.

일단 맞춤 설정기능을 쓸 수 있게 되면 내가 쓰기 편하게 고쳐놓고 다시 평가를 하는 것으로 마무리.



참고 링크 : http://appleinsider.com/articles/17/02/16/microsoft-rolls-out-macbook-pro-touch-bar-support-to-all-office-for-mac-suite-users

2017년 2월 6일 월요일

Wacom CTH-470 windows 10 Pro 에 설치하기

이번에도 드라이버 문제 발생!

최신 드라이버를 설치하면 장치를 찾을 수 없다고 한다.

경험을 살려 예전 드라이버를 설치하니 정상 작동 했다.

윈 10 프로에서

펜태블릿 드라이버 5.3.5-3 에서 동작 확인


http://cdn.wacom.com/u/productsupport/drivers/win/consumer/pentablet_5.3.5-3.exe

2017년 2월 1일 수요일

SNFaceCrop 자동 얼굴 크롭 툴 추천 (Auto Face Crop Tool)

자동으로 얼굴 잘라주는 툴 추천



http://deteksiwajah.blogspot.kr/2011/11/snfacecrop-14-is-released.html

OpenCV 를 이용하는 것 같은데,  윈도우 바이너리만 배포 중인게 조금 아쉽다.

얼굴 학습 데이터 정리할 때 사용하면 유용하다.



아래와 같이 입력하면 배치로도 작업 가능

SNFaceCrop -d c:\myphotos -f *.bmp -ex 50 -ey 50

myphotos 를 나의 작업 원본이 있는 경로 *.bmp 나 png나 jpg 로 하면 되고

-ex 와 -ey 는 확대할 퍼센티지


Croped 폴더 결과물을 보면서 제대로 잘렸는지 확인을 해줄 필요는 있다.
3~5% 정도 오인식 결과물이 있는 듯.

BossSensor - 얼굴 화상 인식을 이용한 월급 루팡 프로그램을 직접 실행해보았다. (수정내용 첨부)


점심시간이 끝나고 지루한 오후...

우리 팀에서 제일 재밌는 분이 팀 단체 쪽지를 보냈다.

쪽지 : 케이! 케이!! 이것 좀 만들어줘!!!"

나 : ㅋㅋㅋㅋ

----------------------------

오늘의 유머 사이트
제목 : 월급 루팡을 하려는 프로그래머

내용을 보았다.






최근에 업무차 OpenCV와 딥러닝을 공부하고 있던 입장에서 흥미로운 내용이었다.

내용은 단순하게 보면 Face Recognize 샘플인데 가까운데,
저런 재밌는 아이디어를 생각만으로 끝내지 않고, 실제로 만들어서 실행했다는게 큰 차이.

잉여력 방출은 언제나 재밌고 즐겁다.

원문 블로그는 여기
http://ahogrammer.com/2016/11/15/deep-learning-enables-you-to-hide-screen-when-your-boss-is-approaching/

(블로그 주소 이름이 무려 아호그래머다;;; あほ=멍청이,
똑똑하게 삽질하는 멋진 블로그인듯... >_<! 이런 것 너무 좋다.)

--------------------------

처음부터 만들까 하다가 원작자가 소스를 오픈해 둔 터라
시간 절약 + 재미로 바로 실행해볼 요량으로 달려들었다.

원문 블로그에 공개한 보스 센서 오픈소스 GitHub


최근까지도 수정되고 있는 소스지만..
당연히 그대로 실행될리가 없지.

에러 메시지를 하나씩 확인하며 해결해 나가기 시작했다.

필요한 라이브러리나 그 외 환경 세팅하는 시간이 오히려 꽤 걸리기 시작하면서

그렇게 야근이 시작되었다. ㅋㅋㅋㅋ

누군가 해보고 싶은 사람에게 도움이 되도록 결과 자료를 남긴다.



--------------------------

# 실행한 환경

- 맥북프로 2016 15 Late
- iSight MacBook 내장 웹캠
- macOS Sierra 10.12
- Anaconda (Miniconda3)
- OpenCV3

IDE 는 Pycharm

※ 검증해보지는 않았지만, Windows 에서도 동작하지 않을까?

# 설치된 Python Library Version
직접 검증한 최신 버전의 라이브러리들

h5py (2.6.0)
Keras (1.2.1)
mock (2.0.0)
numpy (1.12.0)
pbr (1.10.0)
pip (9.0.1)
protobuf (3.2.0)
PyYAML (3.12)
scikit-learn (0.18.1)
scipy (0.18.1)
six (1.10.0)
sklearn (0.0)
tensorflow (0.12.1)
Theano (0.8.2)

------------------

# 문제 해결 1-2-3

1. PyQt4 설치가 안된다. (macOS Sierra)
brew install pyqt4 가 안된다!!!
구글링 해도 답이 없어 찾아보니 os 버전이 최신이라서 그런듯...

어디서 사용하나 코드를 보니 굳이 PyQt4일 필요는 없더라.
 PyQt5를 설치하고, 스크린 관련 코드를 4에서 5로 새로 옮겨준다.
이 작업은 조금 귀찮은 정도. 다른 이를 위하여 내 GitHub 포크에 업로드 해두었다.

덤. PyQt5 를 아나콘다로 설치하기
사용할 환경으로 소스를 바꾼 뒤
> conda install pyqt

2. requirements.txt 에 필요한 라이브러리가 설치가 안된다.
파이썬 라이브러리 목록과 버전이 잘 정리되어 있긴 한데,  해당 버전으로 설치할 수 없는 라이브러리 패키지가 있다.

예를 들면 tensor flow 0.10.0...
이 때문인지 keras도 조금 문제가 생기는데, 이것도 최신 버전으로 설치하자.
예전 버전 그대로 두면 사진 트레이닝 할 때 트러블이 있다.
requirements.txt 도 수정해서 내 GitHub 포크에 업로드 해두었다.

3. model 데이터를 저장할 경로를 미리 만들어줘야 한다. 
하위 경로로 미리 ./store/ 폴더를 만들어두면 오류가 없다.
내 GitHub 포크에는 미리 생성해두어 해결했다.

4. 모델데이터를 새로 생성할 때는 기존 모델 파일을 삭제할 것
boss_train.py를 이용하여 모델데이터를 학습하면 ./store/model.h5 가 생성되는데,
새로 학습시킬때 이 파일을 생성하기 전에 미리 지워줄 것 (덮어쓰기 오류 남)
덮어쓰게 수정 하려다가 이건 귀찮아서 패스...

5. 얼굴 인식률이 떨어진다.
다양한 각도로 약 500 - 1200 장 정도 학습을 시켜야 한다.

# GitHub Fork Repository

GitHub Fork 해서 수정한 내용 커밋해두었다.
혹시 오리지널 GitHub 출처에서 실행이 어려운 분이나
내가 수정한 내용이 필요하신 분은 아래의 경로에서 다운을...

https://github.com/prscu24/BossSensorPyQt5


# 실행화면 영상
내 얼굴을 학습 시킨 후, 비상 이미지는 실행되지 않게 하여 실행.
카메라 근처를 어슬렁거려보았다.




# 마무리

학습 데이터가 부족해서 인식률은 떨어지지만
원래 목적인 경고의 의미로는 나쁘지 않은 동작을 보인다.
 - 인식률이 나쁘면 보스가 출몰하지 않았는데도 나왔다고 오인식을 해버리는 문제가;;;
그리고 사장님 얼굴을 양해하지 않고 그렇게나 많이 모을 수 있을까?
이것은 고양이 목에 방울을 다는 상황이 생각난다.

거기다가 실행 비용도 커서 항상 실행해두기는 좀 부담되는 정도 ^^;; (CPU 사용률이...)

학습용으로 토이용도로 재밌게 사용해보면 될 것 같다.

<오늘의 삽질 끝!>

2017년 1월 31일 화요일

Anaconda 설치 하기

파이썬 환경 관리를 위해 필요해졌다.

급하게 세팅한 후 나중에 내가 다시 볼 메모로 쓰려고 글을 남긴다.



아래의 미니콘다를 퀵가이드에 따라 설치하자.

https://conda.io/miniconda.html



설치가 완료 되면 MacOS 터미널을 닫고 다시 터미널을 열자.

아래의 명령어로 환경을 만들고 없앨 수 있다.



설치 확인

conda info --envs
새 환경 만들기

conda create --name kpaper
환경 활성화

source activate kpaper
환경 비활성화

source deactivate

환경 지우기

conda remove --name kpaper --all

환경 클로닝 하기
conda create --name kpaper --clone anotherenv

설치 가능한 패키지 확인하기
conda search --full-name python
--full-name 은 완전히 패키지 이름이 일치할 때에만 표시한다.


파이썬2 설치하기
conda create --name kpaper python=2
아래와 같이 입력해서 파이썬 버전을 확인할 수 있다.
source activate kpaper
python --version

파이썬3 설치하기
conda create --name kpaper python=3

모든 환경 목록 보기

conda info --envs

새로운 패키지를 어떤 환경에 설치하기

conda install --name kpaper beautifulsoup4
------------------

사용 소감 :

완전 좋다! 편리하다!;;;
진작 알았으면 좋았을걸!!
아니 예전에는 알았어도 체감을 못했을 것 같긴하다 ^^;