Mat img = imread("ss.jpg");  // imread("ss.jpg",0);  ->0을 주면  grayscale (흑백 영상으로 나온다, 1채널)     3채널이라도 흑백영상으로 가능                                                                                                                        (green,blue,red)를 다 동일한 값을 주면 흑백으로 변경

nameWindow("abc",0);        // 실행창 열기 , 0을 주면 창 크기 변경 가능 , 1이면 불가


imshow("abc",img)


waitKey(0);                                                                                                       


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


#include <opencv2\opencv.hpp>


using namespace cv;

using namespace std;


int main(int, char)

{

// file load

VideoCapture capture(경로 or 0 );  0일때는 설치된 웹캠 사용 , 경로일 경우 경로상의 동영상 파일 사용

Mat frame;


// check

if(!capture.isOpened())

{

printf("AVI file can not open.\n");

return 0;

{


// create window

nameWindow("w");


while(1)

{

// 동영상은 사진의 집합체  하나하나 capture 에서 frame 으로 옮긴다

capture >> frame;

if(frame.empty())

break;


imshow("w",frame);

if(waitKey(10) == 27)        // waitKey 안에 리턴되는 값은 아스키 코드값이 리턴 ,, 27은 esc 이므로  esc를 누를 경우 바로 종료됨

break;

}


return 0;

}


이번에 프로젝트는 2~3개월로 잡고 있고, 만드려는 것은 사람 이미지를 입력시 , 그 영상을 분석하여 알맞은 옷의 사이즈를 나타내주는 프로그램을 만들려


고한다.  


참고 :   open CV 예제 소스코드   http://coyagi.tistory.com



※알고리즘 시간 이후 스탠드 업 미팅 실시

스탠드 업 미팅이란?  회의를 짧게 유지하도록 해주는 것으로서 결과적으로 오랫동안 진행되지 않는 것이 주 목표이다. 회의에 집중도를 높이기 위해서 모든 사람은 아래의 질문 세가지에 대답 하는 방식으로 내용을 간단하게 한다.

-내가 달성한 일은 무엇인가? -오늘 계획한 일은 무엇인가? -문제나 어려운 점은 무엇인가?

참석자마다 말할 수 있는 시간은 짧게 주어진다.(2분의 브리핑) 무엇인가 상세하게 논 의해야할 문제가 있다면 미팅 이후에 해당 인원만 모이도록 한다.(중요!!)


※Poc, Piolet, BMT 개발 단계 돌입

POC (Proof Of Concept)이란? 기존에 시장에서 사용돼지 않던, 신기술을 프로젝트에 도입하기에 앞서, 검증하기 위한 목적으로 사용. 사업과 관계가 약간은 동떨어진 기술 검토를 위한 프로젝트고객사에서 하고, 업무는 아 주 간단한 것을 수반. 신기술 여부는 중요치 않음

Pilot이란? 이미 검증된 기술을 가지고, 대규모 프로젝트 진행에 앞서 소규모로 진행해보는 시험 프로젝트를 말함. 본사업(프로젝트) 진행을 위한 수행안 검증 프로젝트로 가령 기술셋을 확정했으면 그 기술셋으로 실제 업무에 적용해보고 문제점이나 개선안을 마련해서 본 프로젝트에 피 드백 주는 것 (계획, 기술문제, 관리요소, 위험요소, 비용 이런 것을 피드백하는 용도, 당초 기대한 효과에 비해 결과가 너무 미미하거나 비용이 많이 들면 취소)


BMT(Bench Marking Test)이란? 말그대로 성능테스트이다. 예를 들면 00발주처에서 테라바이트 라우터를 도입한다고 할때, 입찰에 응한 업체들의 제품에 대해서 성능비교를 하는 것. 필요에 의해 이것 저것 골라다가 테스트해보고 비교하는 것. 장비 뿐만이 아니라 소프 트웨어(솔루션)도 포함됨 (대부분은 수평적으로 기술셋 비교에 대한 내용이 많지만 업 무적 특성을 포괄하는 솔루션인가? 이러한 요건이면 업무도 물론 수반)

프로젝트 활동 : Ⅰ. 격자 모양지 형식 패턴 실패이유 분석 Ⅱ. 오차범위가 적게 드는 알맞은 선의 두께를 찾는다. 


Ⅰ. 격자 모양지 형식 패턴 실패이유 분석

실패 이유 :  배경이 흰색이고, 선이 검정색이면 안된다. 배경은 검정색이고 선은 흰색이여야 한 다.이유는 다음과 같다. 이유는 카메라의 조리개의 특성에 있다. 카메라의 조리개는 어 두울 때 조리개를 가장 많이 열어 빛을 많이 모아서 잘 보이게 하는 역할을 갖고 있 다. 따라서 배경이 검정색이면 조리개를 많이 열기 때문에 빛을 많이 모으게 되고 흰 색선이 더 뚜렷하게 보이기 때문이다. 

배경이 흰색이라면 조리개를 많이 열지 않아 빛을 많이 모으지 않기 때문에 검정색 선 이 잘 보이지 않을 수가 있다. 또한 흰색이 배경일 경우 왜곡과 굴절이 더 잘 생길수 있다.








판넬 모양 종이지 형식패턴 :

총 개수 : 3 장 너비 : 1m 높이 : 2m

배경 : 검정색 선의 색깔 : 흰색 선의 두께 : ???

격자패턴 : 가로 : 10/ 세로 : 10 

격자패턴 : 가로 : 15/ 세로 : 15 

격자패턴 : 가로 : 20/ 세로 : 20


오차범위가 적게 드는 알맞은 선의 두께를 찾는다는 의미를 해석하면 다음과 같다. 위 그림을 보자 위와 같이 사각형이 있을 때 색칠한 부분이 선의 두께가 될 것이다. 선의 두께가 두꺼워 질수록 격자 길이를 재는데 오차가 생길 수 있다. 

양쪽 끝점을 판단하여 길이를 구한다면 문제가 발생하지 않는다. 하지만 아래의 예시 그림을 보자 선의 중점에서부터 다음 선의 중점까지의 길이를 재서 받아오면 문제가 생긴다. 따라서 적당한 오차율이 생기는 알맞은 선의 두께를 찾는 것이 오늘 프로젝트 의 목표이다.








요즘 세상엔 영상처리를 통해 인간의 생활의 편리함이 더욱더 넓어 지고 있다.


영상처리 기술의 적용 사례들을 설명하자면 


- 생활분야(보안을 위한 홍채인식, QR코드 , 블랙박스와 CCTV에서의 차량 인식 및 사람 인지) 


- 의료분야(X-ray , 초음파 영상, CT, 자기 공명 영상기술 - MRI)


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


이러한 영상처리 기술은 딥러닝 기술 주요 응용 분야중 하나인데  3가지의 이유를 들자면 



l  영상 내 분석 대상의 복잡한 특징을 추출하는 기능을 학습하기 위해서는 데이터로부터 고수준 특징을 학습할 수 있는 능력이 필요한데 딥러닝 기술이 이러한 특징을 가지고 있음


l  기존 특징 추출 및 분류 모델은 화소,에지(edge),명도 변화의 방향, 좁은 영역의 텍스처 등의 저수준 특징을 이용하여 높은 성능을 얻기 어려우며 대상 간 겹침등 노이즈에 따른 환경 변화에 잘 적응하지 못함


l  ,,입의 형태 및 위치와 같은 고수준 특징을 이용할 경우 딥러닝 기술 적용하면 정확하고 안정적인 성능을 얻을 수 있음.



딥러닝 기반 영상처리 응용 서비스 동향

1.    페이스북 모먼트앱  (2015)

모먼트 앱은 사용자가 스마트폰으로 찍은 사진을 페이스북에 올리지 않고도 개인적으로 친구들과 공유하게 해주는 앱이다. 모먼트 앱은 사진에 포함된 사람들의 얼굴을 인식해 그룹으로 분류해주고 개별적으로 사진을 보낼 수 있게 해준다.

2.    마이크로소프트 아담 프로젝트 (2014)

프로젝트 아담은 1400만개의 Web에 저장된 이미지를 파악하며사용자가 생성한 태그에서 도출된 22,000개의 카테고리로 구성 Flickr와 같은 사이트 대규모 데이터 세트 기억하여 사진을 보고 누구인지를 파악하거나 동물이나 물체를 인식하여 알려준다.

 

3.    구글 구글포토 (2015)

구글포토에서 검색 기능은 예를 들면 음식이나 노트북이라는 검색어를 사용해서 내가 저장해둔 이미지들을 검색하면 별도의 태깅을 해두지 않았는데도 해당되는 이미지를 찾아준다.        

더 놀라운 기능은 지오태깅 (사진 또는 동영상 촬영시 자동적으로 GPS정보가 남음)이 안되어 있는 사진의 장소도 식별해낼 수 있고, 사진에 촬영된 인물까지 판단해낸다.

                  

4.    현대자동차 자율주행자동차 (2017CES 자율주행성공) 1 ~ 5단계중 4단계 통과

4단계 : 운전자가 정해진 조건에서 운전에 전혀 개입하지 않고, 시스템은 정해진 조건 내 모든 상황에서 차량의 속도와 방향을 통제하는 등 적극적인 주행을 하게 된다. 사실상 3단계에서 4단계로 넘어가는 것이 업계에 주어진 가장 힘든 도전

5단계 : 완전 자율

 

여기서 쓰이는 가장 간단한 기술 스테레오 카메라를 이용하여 앞유리 상단, 백미러 앞쪽에 좌우로 두개를 달고, 양안의 차이를 이용해 상대 물체와의 거리를 인식 , 영상 처리를 이용하여 거리 조절



조사해보니 정말 다양한 분야에서 영상처리 기술이 쓰여지고 있었고 , 미래에도 정말 다양하게 쓰일꺼라 생각해서

영상처리 기술에 관련된 프로젝트를 하기로 마음 먹었다.



'프로젝트(영상처리)' 카테고리의 다른 글

4. 임계값 영상 (threshold)  (0) 2017.03.10
3. Canny 에지 검출  (0) 2017.03.10
2. 프로젝트 준비 !  (0) 2017.02.19
Visual studio 2015 c++ opencv(3.2)환경설정  (0) 2017.02.13


2017년 한이음 프로젝트 신청 완료 !



프로젝트 소개 및 제안 배경 

학교 수업중에 임베디드 시스템이란 과목이 있다. 거기서 소프트웨어와 하드웨어 두가지를 한번에 다루는 공부를 했는데,  그때 정말 재미있어서 한이음에도 이 두가지를 합친 IOT를 주제로 선정하게 되었다.



그중에서 프로젝트 : 키컸다 가 나온 배경을 설명하자면, 설날에 우리 꼬맹이들 조카 키를 잴려고 하는데, 엄마가 줄자로 키를 잴려고 하는것이다.

그래 ! 저런 허접한 줄자보다 더 편하고 정확한 것을 한번 만들어보자꾸나 !

그래서 나온 것이 작명센스가 넘치는 키컸다 이다. 나머지는 위에 써져있는 것과 같아 이하 동문 !


설치 방법


1. OpenCV 홈페이지에서 운영체제에 알맞은 설치파일 다운 (http://opencv.org/)


2. open cv 설치 (설치경로)



3. 환경 변수 설정


제어판 -> 고급 시스템 설정 -> 환경 변수


PATH 클릭한 뒤  편집(E) 누르기,  변수값에 위에  OPENCV 설치경로를 기준으로 C:\opencv\build\x64bin 을 넣으면 됨




4. VISUAL STUDIO를 켜고 C++ project를 만든다.



5. Debug 와 Releas x64 환경설정


6. TEST


여기서 안돌아가는 사람도 있을텐에 , 아마 대부분 경로 문제일것이다.

이떄 경로를 123.jpg 대신 C:/Users/eunchan/Documents/Visual Studio 2015/Projects/opop/123.jpg 절대경로로 넣으면 될것이다.


'프로젝트(영상처리)' 카테고리의 다른 글

4. 임계값 영상 (threshold)  (0) 2017.03.10
3. Canny 에지 검출  (0) 2017.03.10
2. 프로젝트 준비 !  (0) 2017.02.19
1. 프로젝트 선정 및 제안 배경  (0) 2017.02.19

안드로이드 스튜디오를 처음 시작하면 작업 중 한글이 깨져서 출력되는 것을 확인하실 수 있으실 것입니다.

이는 안드로이드 스튜디오의 fonts.xml 파일을 수정하여 고칠 수 있습니다.


일단 안드로이드 스튜디오를 설치한 위치에서

Android Studio > plugins > android > lib > layoutlib > data > fonts

순으로 폴더를 들어가면 fonts.xml이라는 파일이 있을 것입니다.


대부분 C:\Program Files\Android\Android Studio\plugins\android\lib\layoutlib\data\fonts

로 들어가면 있으실 것입니다.


fonts.xml 파일을 열어 NotoSansCJK-Regular.ttc을 찾아 NanumGothic.ttf로 모두 바꿈니다.


바꾼 후 파일을 저장하면 엑세스가 거부되었다고 뜨는데 fonts.xml을 다른 곳으로 복사하여 수정한 후 붙여넣기하면 해결하실 수 있습니다.


이제, 안드로이드 스튜디오를 들어가면 한글 깨짐 현상이 나타나지 않습니다.



출처 : http://sausage14.tistory.com/7



초록색선 : 유클리드 거리 측정법 = 두 점을 잇는 가장 짧은 거리의 길이 (도로 사정 X)


예를 들어 우리집 (A)  과 역 (B) 이 있을때 도로 사정 생각하지않고 모든걸 가로 질러 가장 가까운 거리를 나타내는것

위에 사진을 보면 초록색선을 생각하면 된다.


퍼렁선 : 맨하탄 거리 측정법 = 두 점을 잇는 가장 짧은 거리의 길이 (도로 사정 O)


위에 예와 똑같다고 생각할때 옵션이 하나 더 추가된다고 생각하면 된다. 도로를 생각하며 가장 짧은 거리로 가야한다.

퍼렁선을 보면 가운데로 가로 질러 가지 못하고 길을 따라 최단거리 이동을 하고 있다.


여기서 잘보면 퍼렁선과 빨간색은 길이가 똑같다.


그래서 맨하탄 거리 측정법의 공식은 

두좌표 (X1,Y1)  , (X2,Y2) 가 있을때   X 좌표의 차의 절대값 + Y좌표의 차의 절대값  ==>  |(X2-X1)| + |(Y2-Y1)|  음청 간단하다.



저번에 했던 초음파 센서 + LCD에  스위치를 더한것이다.


택트 스위치를 눌렀을때 초음파 센서가 작동하여 거리를 잰다음 LCD에  5초동안 표시되며 그 이후에 LCD화면을 깨끗하게 지운다.


두개의 회로도를 합치면 된다.


버튼을 눌렀을때 거리를 잰다음 LCD화면에 5초 동안 표시해주며  , 그 5초동안 LED에 불이 들어와 있음.






소스코드는 



#include<LiquidCrystal.h>

#define trig 0

#define echo 1

const int BUTTON = 7;

int val = 0;

LiquidCrystal lcd(12,11,5,4,3,2);


void setup()

{

  pinMode(trig,OUTPUT);

  pinMode(echo,INPUT);

  pinMode(13,OUTPUT);

  pinMode(BUTTON,INPUT);

  lcd.begin(16,2);

}


long microsecondsToCentimeters(long microseconds)

{

  return microseconds/29/2;

}


void loop()

{

  long duration, cm;

  val = digitalRead(BUTTON);

  if(val == HIGH)

  {

    digitalWrite(13,HIGH);

    lcd.clear();

  digitalWrite(trig,LOW);

  delayMicroseconds(2);

  digitalWrite(trig,HIGH);

  delayMicroseconds(10);

  digitalWrite(trig,LOW);

  duration = pulseIn(echo,HIGH);


  cm = microsecondsToCentimeters(duration);


  lcd.setCursor(5,0);

  lcd.print(cm);

  lcd.print("cm");


  delay(5000);


  }

  else 

  {

    lcd.clear();

    digitalWrite(13,LOW);

  }

}


대충대충해서 엉망진창 



이번에 할것은  아두이노에 초음파센서를 연결하여 거리측정을 한뒤 LCD 화면에 띄울 것이다.



#include<LiquidCrystal.h>

#define trig 0                                  // 초음파 센서 trig - 초음파를 발생하는 신호      (디지털 0번핀 연결)

#define echo 1                                // 초음파 센서 echo - 반사되어 오는 초음파를 받는 역할   (디지털 1번핀 연결)


LiquidCrystal lcd(12,11,5,4,3,2);           // LCD 디지털 핀(12,11,5,4,3,2)로 연결


void setup()                                   // 업로드하면 가장 먼저 setup부터 실행 (딱 1번)

{

  pinMode(trig,OUTPUT);                  // trig핀 출력으로 설정

  pinMode(echo,INPUT);                   // echo핀 입력으로 설정

  lcd.begin(16,2);                             // LCD(16x2)이므로 설정 요롷게 함

}


long microsecondsToCentimeters(long microseconds)         //  340 = 초당 초음파(소리)의 속도, 10000은 밀리세컨드를 세컨드로 10000/340 = 29

{                                                                             //  왕복거리이므로 2로 나눔.

  return microseconds/29/2;

}


void loop()                                        // setup후에 loo()가 무한루프로 계속 돈다.

{

  long duration, cm;

  lcd.clear();                                        // lcd화면을 깨끗이 클리어 

  digitalWrite(trig,LOW);                        // trig(초음파 발생하는 신호)를 껏다

  delayMicroseconds(2);                        //  2마이크로초 동안 딜레이(멈춤) , 1초 = 1000밀리초, 1밀리초 = 1000마이크로초 , 1초 = 1000000마이크로초

  digitalWrite(trig,HIGH);                       //  trig(초음파 발생하는 신호)를 킴

  delayMicroseconds(10);                        

  digitalWrite(trig,LOW);

  duration = pulseIn(echo,HIGH);            // echo가 HIGH를 유지한 시간을 저장 duration에 저장


  cm = microsecondsToCentimeters(duration);  // cm에 함수를 통해 거리를 저장


  lcd.setCursor(5,0);

  lcd.print(cm);                    // LCD 화면에 변수 cm를 띄움

  lcd.print("cm");                 


  delay(1000);                     // 1초동안 delay


}

+ Recent posts