반응형

지난 7월말, 언제나 그렇듯 월급루팡 자세를 가지고 인터넷을 헤매다 눈에 띄는 글이 있었습니다.

 

[셔터맨] 알약 계수기 제작기...

쓸모없이 에너지를 고갈시키는 행위중에 으뜸은 알세기였다.

 

구글링해서 보게 된 다른 블로그에서도 알약 재고조사하는 사진을 보니 알약을 세는 일이 상당히 성가셔 보이는 일이더군요.

약국에 가서 약을 사오기만 해봤지, 약국에서 일어나는 일들은 전혀 알지 못하는지라 흥미로웠습니다. 약국에서의 업무에는 약을 세아리는 행위가 있을거라는 것은 어찌보면 당연히 있을법한 일인데, 지금껏 한번도 생각해보지 못했습니다. 그보다 더 충격적인 것은 알약 계수기를 검색해서 나온 초당 15개 카운트해주는 장비의 가격이었습니다.

 

댓글 중에 눈에 띄는 댓글이 있었으니,

이진화 된 이미지에서 카운팅 하면 생각보다 빠르게 셀 수 있겠네요.
라즈베리파이로 안되려나..;;;;
이런 프로젝트 넘 재밌을 것 같아요!!

 

저 역시 글을 읽으면서 라즈베리파이에 카메라, 진동 모터, 바코드 리더, 터치 모니터 모듈 등을 달아서 만들면 되지 않을까 하는 생각이 먼저 들어습니다.

 

퇴근시간까지 본격적인 루팡모드로 상상을 펼쳐봅니다. "집에 안쓰는 오래된 라즈베리파이와 카메라모듈이 있으니 그걸 쓰면 되고, 오래된 휴대폰에서 진동모터를 떼어내고, 새로 더 사야할 것이 무엇일까?" 실은 핵심이 카운트하는 프로그램일텐데, 전혀 신경을 쓰지 않고 호기심에 이것저것 구매할만한 것들을 뒤져봅니다.

 

퇴근 시간이 다되어, 집으로 돌아와 현실을 맞이합니다. "내가 이걸 왜 하고 있는거지? 이제 주말인데?!"

 

알약을 세는 일은 아니지만 과거 대학원생이라는 종족이었을 때, 유사한 일로 잠깐 고민했던 적이 있었습니다.

 

잠깐 그 암울했던 시기의 이야기를 하자면, 핵물리, 방사선화학 등의 분야에 드물게 쓰이는 것 중에 하나가 안경렌즈 등에 사용되는 CR-39라는 플라스틱(?)을 이용한 PNTD(Plastic Nuclear Track Detector)라는게 있습니다. 플라스틱 핵궤적 검출기가 되려나요. 입자가 CR-39라는 플라스틱에 충돌하며 남긴 궤적을 화학처리를 하여 현미경으로 확대해서 보는 아주 원시적인 검출방법입니다.

CR-39 플라스틱에 남겨진 입자궤적 예시 (출처: physics.okstate.edu)

실제로 보면 위의 사진처럼 까맣게 보이는게 아니고 투명한 플라스틱에 공기방울 모양 비슷하게 파인 형태로 보입니다.현미경으로 보면서 입자궤적을 세는 것뿐만 아니라 크기에 따라 구분도 해야합니다.

 

엄청 노가다로 보이지만 방법은 있습니다. 구글에서 조금 검색해보면 미국국립보건원?(National Institutes of Health)에서 개발된 오프소스인 ImageJ라는 프로그램이 있었으니, 이미지에서 세포(cell)를 찾아 카운팅을 하는 기능이 있습니다. 세포를 찾으나 궤적을 찾으나 비슷하게 이미지의 명암을 구분해서 찾는 것이니, 유용한 프로그램이었습니다.

 

저는 위의 원시적인 검출기와는 관련이 없는 연구주제였고, 노가다를 해야하는 후배에게 ImageJ 프로그램을 찾아 권해줬었는데 생각보다 일의 진척이 없었습니다. 옆에서 지켜보니 현미경으로 훑어가며 이미지를 만드는데 실험에 따라 손톱만한 플라스틱에 이미지가 100장 안밖으로 발생될 수도 있습니다. 그 손톱만한 플라스틱이 점점 쌓여서 수백장이 되어가는데 분석이 못 따라가는 것으로 보이더군요. 이미지 한장이라도 흑백 전환, 명암 조절, 필터 등의 과정을 거치는데 하나하나 해주는 것도 일이였던 겁니다. 결국 그 후배는 아무런 결과를 내지 못하고 대학원을 떠났고, 뒤이어 나타난 외국인 박사후연구원은 후배가 남겨놓은 수백장의 플라스틱 조각에 경악을 하면서 몇개월 동안 그걸 해결하는라 개고생하였습니다.

 

그 당시 연구실미팅 때 마다 "저걸 자동으로 분석하는 프로그램을 만들면 안되나?"하는 생각을 했었습니다. 현미경에 연결된 CMOS 카메라에서 가져온 이미지를 바로 분석처리하는 프로그램을 생각했었지만, 저의 대학원 탈출이 우선인지라 생각만 하다가 잊혀졌었습니다.

 

수년이 흐른 지금 월급루팡의 자세로 "알약 계수기 제작기"를 읽다가 위의 원시적인 검출기에 대한 기억이 마치 꿈속의 논산훈련소처럼 떠올랐던 겁니다.

 

현실적으로 생각해봤습니다. 이미지와 관련한 프로그래밍은 어떻게 하는지도 모르는데? 간단한 토이프로젝트로 할만한 수준이 무엇일까?

 

충동적으로 다음 2가지를 구매했습니다.

라이트박스? 라이트보드? 이런게 있다는 것은 이번에 처음 알았는데, 그림 그릴때 쓰이는 LED 불빛나는 하얀판이더군요. 알약을 이 보드 위에 놓으면 명암차이가 뚜렷할 것입니다. 배송료 포함 1만5천원이 안된듯 싶네요.

인터넷 쇼핑으로 검색하면 배송료 포함하여 1만5천원도 안되는 저가의 웹캠입니다. 결론부터 말씀드리면 웹캠은 해상도가 640*400으로 너무 낮아서 절레절레..

 

주말에 산책을 하다가 문구점에서 폼보드?를 삽니다. 6천원??

TV를 보면서 주섬주섬 자르고 붙입니다. 아래는 LED 라이트박스, 그 위로 투명L파일철을 오려만든 트레이, 상단에는 웹캠. 트레이 위에 알약을 놓고 위에서 웹캠으로 이미지를 찍어서 알약의 갯수를 세는겁니다.

 

근데, 하드웨어를 만들었는데 소프트웨어는 시작하지도 않았습니다. 뭔가 순서가 잘못되었습니다. 뭐 제 인생에서 이런게 한두번도 아니고...

 

구글링해보니 opencv라는게 자주 눈에 띕니다. 이미지 쪽에서 많이 쓰이는건가 봅니다?

 

opencv 예제를 몇개 조합해봅니다. 함수에 대한 설명은 안 읽었지만 어떻게든 되겠죠. GUI를 만들거나 할 여유는 없습니다. 일단 카운트나 될지 모르겠습니다. 그래도 처음 접한 opencv가 웹캠으로 이미지를 찍고 보여주고 저장하는게 간단히 되어서 좋네요.

 

m&m 초코렛을 올려봅니다. 아직 라이트박스는 켜질 않았습니다.

라이트박스를 켜고 웹캠으로 본 m&m 초코렛 이미지와 분석된 이미지입니다. 프로그램을 실행하면 이미지 한장을 찍고, 외부의 검은 테두리를 제외한 안쪽 조명빛이 들어오는 영역을 잘라내고 카운트를 합니다. 예제를 조합해서 급조한 코드인데 위와 같이 구분하게끔 했습니다. 실행하면 그림뜨고 갯수가 출력되는데까지는 1초는 안되는것 같습니다. m&m 초코렛 한봉지에는 47개가 들었더군요. 희망이 보입니다.

 

투명한 약도 꽤 있을텐데, 그런 녀석들도 카운트할까 궁금합니다. 편의점에 나가서 HARIBO를 사옵니다. 

맛있어보이는 haribo를 올려두고 프로그램을 실행해봅니다. 일단 먹고 싶긴 합니다.

망했습니다. 예제 코드 한두개 조합으로는 어림도 없네요. opencv란 녀석을 공부해야겠습니다.

 

와이프의 허락을 얻어 영양제 몇개를 테스트 해봤습니다.

그나마 불투명한 약들은 예제 코드 수준으로도 갯수를 잘 세어줍니다. 물론 좌측과 우측의 약을 셀때 설정값을 일부 바꾸긴 했습니다.

 

지금 제 토이프로젝트에서는 오메가3와 같은 투명한 약은 아예 카운트를 못하는 수준입니다. 간단한 테스트로 해상도가 훨씬 높은 휴대폰 카메라로 사진을 찍어서 코드를 돌려봤더니 확실히 높은 해상도가 투명한 알약의 영역이라든지 경계선이라든지 더 잘 구분해내더군요. 단순히 해상도 뿐만 아니라 휴대폰 카메라로 찍을 때 노출이랑 화이트밸런스를 휴대폰이 잘 맞춰준 영향도 있어보였습니다.

 

물론 불투명한 약이라도 그 크기나 모양에 따라 적절한 인풋값이 필요해보이는데, 지금은 예제 코드 수준이라 건드릴게 많긴 합니다.

 

우선 여기까지 해보았지만, 앞으로 얼마나 진행될지는 모르겠네요.

반응형

+ Recent posts