Dejavu

오늘 소개해 드릴 프로젝트는 Dejavu입니다. Acoustic Fingerprinting용 오픈 소스인데요. 이 Acoustic Fingerprinting은 Shazam 이라던지 Spotify처럼 음악을 듣고는 어떤 음악인지 알아내는 알고리즘을 가지고 있습니다.

2016/05/19 Editor’s choice

worldveil/dejavu
_dejavu - Audio fingerprinting and recognition in Python_github.com


Acoustic fingerprinting 이란?

Acoustic fingerprint - Wikipedia, the free encyclopedia
_Practical uses of acoustic fingerprinting include identifying songs, melodies, tunes, or advertisements; sound effect…_en.wikipedia.org

네, 위키가 영어라서 죄송합니다.

원래 이 쪽 분야에서 유명한 프로젝트는 echoprint 라는 오픈 소스입니다. 안드로이드용으로 어떻게 만들 것인지에 대한 알고리즘까지 NDK 용으로 만들어져 있습니다.

The Echo Nest
_GitHub is where people build software. More than 14 million people use GitHub to discover, fork, and contribute to over…_github.com

이렇게 유명한 오픈소스가 있지만 dejavu를 소개하는 것은 mysql 데이타베이스에 입력하고 쿼리를 통해 가져오는 방식이라 독특함이 있어서 입니다.


설치를 해 봅시다

worldveil/dejavu
_dejavu - Audio fingerprinting and recognition in Python_github.com

설치 가이드가 있어서 죽 살펴보고는 리눅스가 더 쉽겠네 라고 덤볐다가 yum, apt-get 최신 레파지토리에서는 제대로 찾아지지 않아서 (제 실력 부족일 수 있습니다.)

Mac으로 다시 복귀했습니다.

Python은 2.7 기준으로 작업을 했습니다.

brew install portaudio  
brew install ffmpeg  

sudo easy\_install pyaudio  
sudo easy\_install pydub  
sudo easy\_install numpy  
sudo easy\_install scipy  
sudo easy\_install matplotlib  
sudo easy\_install pip  

sudo pip install MySQL-python  

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

짧은 몇줄 밖에 안되지만 마지막 두줄은 그냥 되지 않습니다.

mysql을 기본적으로 깔아야 하고 (이미 깔려 있을 테지만요)

마지막 줄은 Mac OS X -El Capitan에서는

OS X 10.11 엘 캐피탄에 도입된 새로운 보안체계 ‘루트리스(Rootless)’를 끄고 켜는 방법
_업데이트 (2015/12): OS X 엘 캐피탄이 업데이트 되면서 csrutil status 명령어와 관련해 변경사항이 있었습니다. 이번 WWDC가 개최되기 전부터 새로운 보안 기능이 애플의 두 운영체제에 도입될…_macnews.tistory.com

여기를 참조하세요.


실행을 해 봅시다.

python2. 7을 기준으로 실행을 합니다.

\>\>\> from dejavu import Dejavu  
\>\>\> config = {  
... "database": {  
... "host": "127.0.0.1",  
... "user": "root",  
... "passwd": <password above\>,   
... "db": <name of the database you created above\>,  
... }  
... }  
\>\>\> djv = Dejavu(config)

이 소스는 Mysql 에 접근을 하는 소스입니다.

설치를 하고

$python example.py

를 실행시켜 주면 dejavu 데이타베이스 및에 fingerprints 와 songs 테이블이 생깁니다.

+-----------------+

|Tables\_in\_dejavu |  
+-----------------+

|fingerprints |

|songs |  
+-----------------+

안에는 아래와 같이 데이타들이 들어 있습니다.

대강 Database 에 어떻게 저장하고 비교를 하는지 알것 같습니다.

더 자세한 설명은 아래의 링크를 참조하시면 될 것 같습니다.

Audio Fingerprinting with Python and Numpy
_The first day I tried out Shazam, I was blown away. Next to GPS and surviving the fall down a flight of stairs, being…_willdrevo.com


그러면 앱을 어떻게 만들면 좋을까요?

파일 Recognizer를 한번 실행해 보았습니다.

\>\>\> from dejavu.recognize import FileRecognizer  
\>\>\> song = djv.recognize(FileRecognizer, "./wav/18000.wav")  
\>\>\> print song  
{'song\_id': 6, 'song\_name': '18000', 'file\_sha1': 'AF3C75663CC86AD857E05E79EE8A028678D85359', 'confidence': 19, 'offset\_seconds': 0.0, 'match\_time': 1.4198949337005615, 'offset': 0}

아래와 같이 잘 인식 합니다.

wav파일들을 잘만 만들어서 스피커를 통해 아웃풋을 통해 들어오는 음악을 잘 만진다면 spotify 같은 앱도 만들 수 있겠군요. ( 오 이 근자감)


바로 되는 건 없어요?

있습니다. 눈썰미가 있으신 분은 Recognizer를 보고 예감하셨을 텐데요. MicrophoneRecognizer 라는 녀석이 있어서 실행을 시켜 보았습니다.

\>\>\> from dejavu.recognize import MicrophoneRecognizer  
\>\>\> song = djv.recognize(MicrophoneRecognizer, seconds=10)

이상하게 잘 작동하지 못하는 걸 보니 화이트 노이즈가 많아서 그런 듯 합니다.

이 노이즈들을 제거하는 내용은 다음번에 알아보겠습니다.

By Keen Dev on May 19, 2016.

Exported from Medium on May 31, 2017.

Xamarin

xama 는 사마? 자마? 욘사마? 욘자마?

최근에 MS가 Xamarin을 인수하면서 오픈소스로 풀어버렸죠. 경쟁할만한 플랫폼으로 React-native 가 뜨고 있던 상황에서 만만치 않은 개발 풀을 가지고 있는 C#진영의 크로스 플랫폼이 진격을 시작했습니다.

오늘은 이 Xamarin을 간단하게 리뷰해볼까 합니다.

2016/05/18 Editor’s choice

Xamarin
_GitHub is where people build software. More than 14 million people use GitHub to discover, fork, and contribute to over…_github.com

Xamarin 이 뭐여.

처음 들어보신 분들도 있으리라 확신합니다.

시작은 Mono 부터

시작부터 창대

이건 또 뭐여.

Mono 는 원래 Ximian(Gnome) 에서 시작해서 Novell을 거쳐서 지속된 프로젝트로 Ecma 스탠다드에 부합하는 .Net Framework 호환 세트를 만들던 오픈 소스 그룹이며 거기에 속한 개발자들이 Xamarin을 세웠고 지금은 Microsoft 산하에 존재하게 되었습니다.

원래 Gnome, Novell에 속했던 사람들이 Xamarin 홀로는 오픈소스가 아니었다가 MS 산하가 되면서 오픈 소스로 전환이 된 것은 어쩌면 MS 보다 Xamarin 쪽의 생각이었을 수도 있겠다는 생각이 듭니다. (이제 앵벌이 할 필요가 …?)

Mono는 기본적으로 크로스 플랫폼을 지향했기 때문에 Linux 대부분 계열과 심지어는 PS3, Wii, XBox360에서도 돌아가기도 합니다.

한줄정리 : .Net을 크로스 플랫폼에서 돌아가게 하기 위한 오픈 소스. 처음에는 Mono 만 오픈소스라 리차드 스톨만같은 법사가 쓰면 안된다고 극구 반대했으나 쩜넷을 오픈 소스화 하면서 의혹의 눈초리는 걷힌 상황

자바와는 다르다. 자바와는!

이미지 출처 : 나무 위키 건담 자쿠와는 다르다! 자쿠와는 항목

뭔가 덕후같은 장면을 보셨다면 그것은 오해입니다.(덕후 눈에는 덕후만 보이는 법)

아키텍쳐

이미지 출처 : 위키피디아 모노 항목

다르긴 뭐가 달라. 한개도 안빼고 똑같아요. (만든 놈이 다름.)

성능이 다름.

.Net4.5 vs Java8 관련된 부분은 갑론을박이 엄청나게 진해되고 있으니까 제가 말을 더 얹어서 헬게이트를 열 생각은 없습니다만 일단은 Xamarin측 주장이라고만 해 두죠

Syntax가 다름

.Net 이 여러모로 진보한 언어의 강점을 아직은 취하고 있습니다만..

(Java8은 다르다!)


서론이 긴 걸 보니

잘 모르는군요. 네 맞습니다. 자알못입니다.

하지만 개발자는 코드로 얘기합시다.

먼저 자마린 스튜디오를 다운받아 봅시다.

https://www.xamarin.com

빨간 약과 파란 약이 있습니다

Mac에서 받을 때는 Xamarin Studio, Windows 에서 받을 때에는 Visual Studio. 응? (심지어는 windows 용 iOS 에뮬레이터를 제공! https://developer.xamarin.com/guides/cross-platform/windows/ios-simulator/)

저는 Mac이라 일단 Xamarin Studio를 받아 봅니다.

받아 보면 이렇게 생겼군요.

프로젝트를 만들어 봅시다.

파일 -> 새로만들기 -> 솔루션 을 선택하면 다음과 같은 내용의 다이알로그가 나옵니다.

고를 수 있는 메뉴가 생각보다 많습니다.

일단 대분류부터 살펴보면 다음과 같습니다.

  • Cross platform
  • iOS
  • Android
  • Mac

Cross Platform 은 Xamarin.Forms라는 API 들을 사용하게 되어 있고, iOS는 Xamarin.iOS, android는 Xamarin.android 의 API 들을 사용할 수 있습니다.

API Documentation - Xamarin
_Xamarin Test Cloud Find bugs before your users do_developer.xamarin.com

한번 궁금해서 API 소개가 어느정도 나와 있을까 생각해서 iOS용 CoreLocation 네임스페이스의 CLGeoCoder를 살펴 보았습니다.

깨알같은 API 하악

명불허전 MS라 불러야할지 원래 자마린이 저랬는지는 모르겠으나 MSDN급의 예제까지 나오는 기염을 토하고 있습니다( 보고 있냐 React-native! )

그나 저나 느낌상으로는 iOS 대부분의 API들을 대응하는 C# API들이 있는 거 같습니다. (뭐야 이거 무섭잖아)


각설하고! 먼저 Cross Platform으로 프로젝트를 만들어 보겠습니다.

com.companyname의 네임스페이스를 가지는 TechX용 프로젝트를 가져보겠습니다

next의 향연

next

만들고 나니 이런 시시껄렁한 페이지가 나오는 군요

프로젝트 트리를 살펴보면

  • TechX
  • TechX.Droid
  • TechX.iOS

이렇게 세가지 분류가 나옵니다.

TechX.cs 파일이 “Welcome to Xamarin” 이길래 “어서와 TechX Forms! 이런 시시껄렁한 프로젝트는 처음이지?” 로 바꿔 보았습니다.

아직 에디터는 별로군요. 한글 입력에 문제가 많습니다. 2바이트 코드가 아마 다 같은 문제를 겪을 거 같습니다.

실행을 해 봐야죠.

안드로이드도 한번 실행해 볼까요? 기본으로 Mac 용 Xamarin 만 그런건지는 모르겠는데 Xamarin.Forms는 iOS 에뮬레이터를 기본으로 잡고 있습니다.

안드로이드 환경을 추가 하려고 해도 잘 안되는데 이런 경우는 실행하는 팁이 따로 있습니다.

당연히 AVD 처럼 디바이스 추가는 미리 되었다고 가정을 하면

.Droid 프로젝트에 마우스를 가져다 데고 실행을 하고 에뮬레이터를 선택하면 실행이 가능합니다.

에러는 지난 실행한 프로세스를 제가 죽이지 않아서 발생한 것 같습니다. 안드로이 배경은 어두운 색이 갑.

안드로이드 스튜디오 에뮬레이터를 본거 같은데?

맞습니다. 안드로이드 에뮬레이터를 선택해도 그 쪽으로 빌드가 가능하고, xamarin이 제공하는 에뮬레이터도 따로 있습니다(player 라고 함)

의미

상당히 잘 정리가 되었고 잘 만들어진 프레임워크가 눈앞에 있고, 우리는 아직은 약간 부족해 보이지만 굉장히 가능성 있는 미래를 눈앞에 두고 있다고 생각하면 전 우주가 우리를 도와 줄 것입니다.

By Keen Dev on May 17, 2016.

Exported from Medium on May 31, 2017.