글

PyQt FileDialog

이미지
FileDialog를 사용하기 위해 가장 위에 import하여 선언하여 준다. log = QFileDialog()를 선언하면서 사용할 준비를 한다. 경로만 가져오는 방법도 있으며, 이름만 가져오기도 하며, 하나 또는 그 이상의 이름을 가져 오는 방법도 가능하다. 현재는 파일 하나의 이름만 가져오면 되기에 getOpenFileName()함수를 사용하였다. (다른 함수에 대한 설명은  https://doc.qt.io/qt-5/qfiledialog.html#static-public-members  에서 볼 수 있다.) getOpenFileName에서 차례로 1. self는Parent 설정 2. 'Get Model'은 Dialog가 열렸을 시 창에 제목을 붙여주며 3. os.getcwd()는 시작될 경로(os.getcwd()를 사용하려면 os를 import 해 줘야한다, sys를 사용하는 방법도 있다.) 4. 가져올 파일들의 확장자를 정의 할 수 있다. "video (*.mp4);;All (*.*)" 와 같이 두게 이상의 목록을 만들고 싶은면 세미콜론(;) 2개를 이용하면 된다. (다이얼로그를 연 모습) (qt designer를 이용해 만든 경로를 표시할 LineEdit과 ToolButton)

yolo에서 라벨링으로 생성한 txt 파일을 tensorflow에 맞는 xml 파일로 변환하기

이미지
우선 윈도우와 리눅스에서 아나콘다로 실행하여 본 결과 모두 정상 작동을 한다. 경로 작성시 window에서 아래와 같은 오류가 표시 될 시 경로 앞에 r을 붙여주면 된다. ex) IMG_PATH = r "D:\VisualStudio\WorkSpace\data\img-GBS-IMG" txt 파일에서 xml 파일로 변환시에 xml파일 이름 앞에 경로가 추가되는 오류는 고쳤으나 저장 경로가 제대로 지정되지 않는 오류는 아직 수정하지 못 하였다. 그러니 따로 디렉토리를 생성하고 그 안에서 이 코드를 돌리는 것이 나을 것이다. 코드에서 IMG_PATH와 txt_folder는 각각 .jpg, .txt 파일만 넣어 두는 것이 나을 것이다. 한 폴더 안에 jpg, txt 파일이 같이 있으면 파일 정보를 읽어 오는데 오류가 발생할 것이다.(능력자 분은 고쳐서 사용 하시면 됩니다...) from lxml import etree from PIL import Image import csv import os import io IMG_PATH = r"D:\VisualStudio\WorkSpace\data\img-GBS-IMG" fw = os.listdir(IMG_PATH) #path of save xml file save_path = r"D:\VisualStudio\WorkSpace\data\annotations" # txt_folder is txt file root that using darknet rectbox txt_folder = r"D:\VisualStudio\WorkSpace\data\img-GBS-TXT" #edit your label set labels = ['green','brown','sugar'] def csvread(fn):     with open(fn, 'r') as cs...

yolo 이용한 winform 작성

이미지
➢ 실행시 기본 화면 ➢ object detect 실행시 화면 ➢ marking open 실행시 나타나는 화면과 차례로 training과 selftrainig 선택시 나타나는 화면

winform에서 dialog 만들기

이미지
https://mirwebma.tistory.com/121 참고

YOLO(영상처리)와 6DoF 로봇 팔(window)

이미지
➢ 전에 사용한 tensorflow가 아닌 YOLO( You Only Look Once)를 사용하여 영상을 촬영하고 미리 학습시켜둔 이미지와 매칭하여 물체를 찾는 방법을 사용했다. 공식 홈페이지 :  https://pjreddie.com/darknet/yolo/ ➢ 기존 다른 Object Detection보다 처리 속도가 빠르다. ➢ YOLO 설치는  https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects  를 참고하여 설치를 진행하였다. ➢ 각자 원하는 환경과 구성된 환경이 다르기에 설치 시 설정를 정확히 해야한다. 나는 opencv와 cuda가 깔려 있는 상황에서 설치를 시작하였다. 확인후 설치를 시작한다. ✫gpu를 사용한다면 cuda 설치를 해주어야 하며 이때가 가장 중요하다. cuda는 각 gpu가 지원하는 드라이버가 다른데 nvidia 홈페이지에서 자신에게 맞는 드라이버를 선택하고 설치를 하여야 한다. (지금은 환경은 window지만 ubuntu 환경에서 설치시에 고생을 많이 했다.) https://www.nvidia.com/Download/Find.aspx?lang=en-us 에서 자신에게 맞는 드라이버를 선택하여 설치를 하여주면 된다. ➢ 다운로드 후 컴파일은  https://github.com/AlexeyAB/darknet#how-to-compile-on-windows-legacy-way  방법을 사용했다. ➢컴파일도 완료하였으면 이제 training을 실시하여야 한다. training에 필요한 사진은 많으면 많을 수록 좋으며, 다양한 환경(다른 색의 배경 및 바닥, 다른 밝기의 조명)에서 찍은 사진이 많을 수록 좋은 것으로 보인다. 수는 최소 200장 정도 하면 적당한 것으로 생각된다. 필요한 사진들을 수집 완료 했으면 각 사진에 자신이 원하는 이미지를...

6축 로봇 팔

이미지
➢ 6축 로봇팔 제어 로봇팔은 각 낱개의 부품 형태로 배송되어짐. 조립은 동봉된 조립도를 보고 조립. ➢ 로봇팔의 구동 범위가 어디서부터 어디까지 구동 되는지 먼저 조사한다. ➢ 소스 #include <Servo.h> #define NO_OF_FIELDS 6 Servo base, shoulder, foreArm, wristFlex, wristRotate, claw; int inCommand[NO_OF_FIELDS]; int ledPin = 13; void EchoData(int echoWord[]) {  Serial.print("*");  float total;  for (int i = 0; i < NO_OF_FIELDS; i++)  {   Serial.print((int)echoWord[i]);    total+= inCommand[i];   Serial.print(",");  }  Serial.print((int)total);  Serial.print(",");  Serial.print("*");  Serial.print("&"); } void ClearOldData(int oldData[]) {  for (int i = 0; i < NO_OF_FIELDS; i++)  {   oldData[i] = 0;  } } void setup() {  Serial. begin(38400);  base.attach(3);  shoulder.attach(5);  foreArm.attach(6);  wristFlex.attach(9);  wristRotate.attach(10);...

Tensorflow Object_detect

이미지
➢ Object Detecting을 실행하기전 자신이 원하는 사진들을 찍어둔다. 사진은 많으면 많을 수록 좋으며 200장 이상 그리고 다른 배경에서 찍은 사진일수록 좋다. (찍어둔 사진들은 임의의 폴더를 만들고 그 안에 train폴더와 test폴더를 만들어 준다.) (.csv 파일은 아래 xml_to_csv.py 실행 시 생성된다.) ➢ 사진을 찍었으면 각 이미지에서 원하는 이미지를 박싱하여 라벨을 붙여 주어야 한다. 프로그램은 labelImg를 사용하였다. ➢ 각 이미지 마다 라벨링을 완료하였으면 맞지 않는 사이즈가 있을 수 있기에 사이즈 체크를 하여준다. $ cd tensorflow1/models/research/object_detection $ python3 sizeChecker.py  --move (뒤에 붙은 --move는 옵션이기에 빼주어도 상관없으며, --move 입력시 worng 폴더가 만들어지며 이 폴더 안에 맞지 않는 사진들이 들어간다.) (sizeChecker.py의 소스코드 중 디렉토리를 이미지가 저장되어 있는 폴더로 변경하여 주어야한다.) ➢ 사이즈 확인후 .xml 파일을 만들어 준다. $ python3 xml_to_csv.py (xml_to_csv.py 안에는 실행시 어디에 파일은 만들지에 대한 디렉토리가 있기에 사용자에 따라서 바꾸거나 그대로 둔다. 나는 내 임의의 경로로 새로 설정하여 주었다.) ➢ generate_tfrecord.py를 실행하여 준다. (실행전 파일에서 라벨 수와 이름을 변경하여 주어야 한다.) python3 generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record python3 generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=image...