[ Program ]205 7.c# 에서 탐지 위와 같이 새프로젝트를 만들고 픽처박스 하나와 버튼을 하나 추가한다. Nuget 패키지 관리에 들어간다. 찾아보기에서 onnxruntime 으로 검색하면 위와 같이 나오는데 그중 onnxruntime 과 onnxruntime.extensions 를 설치한다. System.Drawing.common 도 검색해서 설치한다. using System;using System.Collections.Generic;using System.Drawing;using System.IO;using System.Linq;using System.Windows.Forms;using Microsoft.ML.OnnxRuntime;using Microsoft.ML.OnnxRuntime.Tensors;namespace onn.. 2025. 1. 22. 6.ONNX 모델 검증 파이썬에서 위와 같이 입력해서 output 값을 확인하자.import onnxruntimeimport numpy as np# ONNX 모델 로드onnx_model_path = "C:/Users/L/runs/detect/train/weights/best.onnx"session = onnxruntime.InferenceSession(onnx_model_path)# 입력 이름 확인input_name = session.get_inputs()[0].nameprint(f"Input name: {input_name}")# 출력 이름 확인output_names = [output.name for output in session.get_outputs()]print(f"Output names: {output_names}").. 2025. 1. 22. 5. ONNX 파일로 변환 https://docs.ultralytics.com/ko/integrations/onnx/#usage ONNXYOLO11 모델을 ONNX 형식으로 내보내서 향상된 성능으로 다양한 플랫폼에 유연하게 배포하는 방법을 알아보세요.docs.ultralytics.com pt 파일을 onnx 파일로 변경하기 위해 위와 같이 작업을 진행한다.참고로 위와 같이 경로를 역슬래시를 쓸경우 오류가 나는데 역슬래시를 슬래시로 바꾸면 된다.---------------------------------------------------------------------------------------from ultralytics import YOLOmodel = YOLO("C:/Users/L/runs/detect/train/wei.. 2025. 1. 22. 4. labelimg 설치및 사용법 https://github.com/HumanSignal/labelImg GitHub - HumanSignal/labelImg: LabelImg is now part of the Label Studio community. The popular image annotation tool created byLabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check out Label Studio, the open source ...github.com위 경로로 들어가자. 우측하단의 R.. 2025. 1. 22. 3.YOLO11 모델로 학습 데이터를 학습하기 위해 어떤 대상을 찾아낼지 먼저 선정한다.개인적으로 강아지를 찾아내기위해 강아지 사진을 백여장 수집했다.학습할때 내부적으로 자동으로 리사이징 하기 때문에 학습할 이미지의 크기나 비율은 통일할 필요는 없고 너무 과도하게 크지만 않으면 된다(GPU 메모리 이내).이미지 사이즈를 640x640 으로 통일하면 학습속도는 약간더 빠를수있지만 만들어진 모델을 사용할때 속도는 동일하다. 이미지를 학습할때 이미지 전체를 학습하는게 아닌 위 이미지와 같이 빡간네모박스 표시한 부분만 학습할 예정이다.위와 같이 전체이미지의 일부분만 학습하던지 아니면 이미지 전체를 학습한다해도 욜로로 학습시 이미지의 어느 위치에 어느정도 크기를 학습할지 내용을 전달해줄 텍스트파일이 필요하다. 위와 같은경우 txt 파일.. 2025. 1. 22. 2. ultralytics 설치 파이썬을 설치한뒤에 위와 같이 cmd 창에서 pip install ultralytics 을 입력해서 ultralytics 을 설치하자. 설치된뒤 cmd 창에서 위와같이 입력해서 제대로 설치됐는지 확인할수 있다.pythonfrom ultralytics import YOLOimport ultralyticsprint("Ultralytics YOLO version:", ultralytics.__version__) 파이썬을 실행해서 위와 같이 한줄씩 입력한뒤 Ultralytics YOLO version: 8.3.59이런내용이 나오면 정상적으로 설치된것이다.exit()로 종료하면 다시 cm 창으로 나갈수 있다. 2025. 1. 22. 1. 파이썬 설치 https://www.python.org/ Welcome to Python.orgThe official home of the Python Programming Languagewww.python.org인터넷에서 파이썬을 검색해서 공식 홈페이지로 들어간다. 메인 페이지에 다운로드가 있는데 다운로드 해서 파일을 받자.위와 같이 다운로드에 마우스를 올리면 창이 열리면서 받을수 있는 창이 뜨는데 Python. 3.13.1 되있는 버튼을 클릭해서 다운로드 하자. 위와 같이 다운 받아진 파일을 실행한다. 아래 항목두가지 다 체크하고 위쪽 Install Now 를 클릭하자. 위와 같이 완료되면 파이썬 설치가 완료 된 상태다. cmd 창에서 위와 같이 입력해서 버전이 정상적으로 출력 되는지 확인.. 2025. 1. 22. Yolo11 을 c# 에서 사용해보기 위한 내용정리 항목 (작업을 진행 하면서 계속 추가) 1. 파이썬 설치 - https://ldg119.tistory.com/7872. ultralytics 설치 - https://ldg119.tistory.com/7883. YOLO11 모델로 학습 - https://ldg119.tistory.com/7894. labelimg 설치및 사용법 - https://ldg119.tistory.com/7905. ONNX 파일로 변환 - https://ldg119.tistory.com/7916. ONNX 모델 검증 - https://ldg119.tistory.com/7927. C# 에서 탐지 - https://ldg119.tistory.com/7938.USB 카메라 (UVC 지원) 테스트 - 보류 2025. 1. 22. keyboard hooking keyhook class public class KeyHook { [DllImport("user32.dll")] static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc callback, IntPtr hInstance, uint threadId); [DllImport("user32.dll")] static extern bool UnhookWindowsHookEx(IntPtr hInstance); [DllImport("user32.dll")] static extern IntPtr CallNextHookEx(IntPtr idHook, int nCode, int wParam, IntPtr lParam); [DllImport("kernel32.. 2023. 9. 19. [ Unity ] UI버튼 추가하는법 위와같이 해주면 작업영역에 UI 영역이 겹쳐서 정상적인상태로 보이게 된다. 2022. 12. 30. [c#] 현재값과 가장 작으면서 근접하는 5의 배수 가져오기 int tempint = 27; double result = 0; if (tempint % 5 != 0) { result = Math.Floor(double.Parse(tempint.ToString()) / 5) * 5; } MessageBox.Show(result.ToString()); 5로나눠서 소수점을 버리고 다시 5를 곱하면된다. 2022. 11. 11. [c#] Nlog 사용법 c# 에서 nlog 사용법을 올린다. ( https://nlog-project.org/ ) nuget 에서 nlog 검색해서 설치하면 되는데 설치하기 귀찬은사람은 첨부 파일을 받아서 참조만 추가해주면된다. 현재 최신버전인 5.0.4 버전이다. 참조된후 아래 코드로 테스트 해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 8.. 2022. 9. 23. 윈도우 실행파일 구조(PE파일) 출처 - https://rninche01.tistory.com/m/84 1. 윈도우 실행파일(PE파일) 개요 1.1 PE파일이란? PE(Portable Executable)파일은 윈도우 실행파일이라고 부르며 윈도우OS에서 사용되는 실행파일형식을 의미하며 UNIX의 COFF(Common Object File Format)을 기반으로 만들어졌다. windows 환경에 따라 다르게 부르는데 32bit환경에서는 PE32, 64bit환경에서는 PE+또는 PE32+라고 불린다. Linux나 Unix와 같은 계열의 환경에서는 PE파일과 비슷한 형식으로 ELF(Executable and Linkable Format)파일이 존재한다. PE파일을 통해서 프로그램이 사용하는 API 또는 DLL 등 다양한 정보와 어느 메모리.. 2022. 8. 26. dll, exe 파일 비트 수 확인 하는 방법 https://www.extrabit.com/exeproperties/download 2022. 8. 22. 62.네트워크프로그램 피씨끼리 데이터 주고 받는 방법을 알아보자. 일단 용어를 몇가지 알아야 한다. * 엔드 포인트 - 아이피 주소와 포트 번호의 조합을 의미합니다. * 소켓 - 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔트 포인트 아이피주소는 흔히 생각하는 192.168.1.1 처럼 숫자로 만들어진 PC 의 주소이고, 포트는 각 피씨에 연결할수 있게 만들어진 숫자로 된 가상의 연결 구멍이라고 생각하면 된다. 참고로 그림1처럼 제어판 에서 방화벽을 들어가서 고급설정을 누르면 피씨가 사용중인 포트가 나온다. 각 프로토콜에 따른 기본 포트는 HTTP=80, FTP=21, TELNET=23, SSH=22, SMTP=25, POP3=110 이다. 대부분 저 포트들은 사용중인 포트라고 생각하면 되고 테스트등.. 2022. 5. 20. 61. 이벤트 이전에 델리게이트를 배웠는데 델리게이트와 동일한 이벤트 라는것도 있다. 앞장들에서 배운 델리게이트는 파라미터용으로 주로 설명했고 이번에 이벤트는 서로 데이터를 주고받는데 최적화 된 내용으로 살펴보자. 이벤트와 델리게이트 차이점을 찾아보면 여러글들이 있는데 설명이 신통치않다. 이래저래 내용을 찾아보다보면 결국 같은거라는 생각이 드는데 아래 글에서 이야기한 내용을 한번 읽어보자. https://www.sysnet.pe.kr/Default.aspx?mode=3&sub=0&pageno=0&detail=1&wid=5375 이벤트와 델리게이트의 차이가 궁금합니다. 이벤트와 델리게이트의 차이가 궁금합니다. [링크 복사], [링크+제목 복사] 조회: 3477 글쓴 사람 영귤 홈페이지 첨부 파일 부모글 보이기/감추기 C.. 2022. 5. 18. 60. 유저컨트롤 유저컨트롤은 사용자가 임의로 만들어서 사용하는 컨트롤이다. 로또 추첨기를 생각 해보자. 숫자가 1~45까지 순차적으로 증가한 후 랜덤 숫자로 최종 결정 되는식으로 6개의 숫자를 출력해주는 프로그램이 있다고 생각해보자. 그러면 6개의 컨트롤을 다 만들어 줄 필요없이 1~45까지 순차적으로 증가한후 랜덤 숫자로 최종 결정되는 컨트롤이 있다면 그 컨트롤을 복사해서 사용해주면 훨씬 편할것이다. 간단하게 만들면서 이해해 보자. 그림1처럼 컨트롤 라이브러리를 선택해서 프로젝트를 만들자. (.NET Framework) 확인. 최초 생성하면 그림2와 같은 화면으로 나올것이다. 중앙의 회색부분이 내가만들컨트롤 크기이다. 그림3과 같이 좌측의 도구상자에서 label 을 드래그 해서 중앙에 놔주고 컨트롤의 크기를 적당히 조.. 2022. 5. 17. 59. lock / Monitor / Mutex 앞장마지막 예제에 잠시 Monitor 클래스를 사용하는 예제를 넣었다. 3가지다 간단하게 말하면 다른곳에서 변경못하게 잠궈놓는 역할을 하는것들이다. 아래 예제를 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 #define lock1 #define type2 using System; using S.. 2022. 5. 11. 58. Threadpool / BackgroundWorker / Parallel Thread 와 task 를 주로 설명하고 있는데 Threadpool 이라는 클래스로 쓰레드를 다룰수도 있다. 아래글을 먼저 읽어보자. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=hyungjoon_&logNo=221700870194 Thread vs ThreadPool vs Task 닷넷 C# 마이크로소프트 .net framework는 동시성을 다루기 위한 3가지 방법이 있다. 1. 스레드(Thread) 에 직접접... blog.naver.com 다른블로그들에서도 거의 task 를 추천하는 사람이 많고 내생각도 비슷하다. 개인적으로는 Thread 자체를 쓰는것도 나쁘지는 않다고 생각한다. 하지만 Threadpool 클래스는 사.. 2022. 5. 11. 57. async / await async 와 await 에 대해서 찾아보면 대부분의 포스터 들은 비동기를 위한 키워드라고 적어놨다. 그런데 잘생각해보면 비동기보다는 부분적으로 동기하기 위한 키워드가 더 맞는 표현이라고 생각한다. [예제소스] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 9.. 2022. 3. 29. 네트워크 연결확인방법 > using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp13 { public partial class connectcheck : Form { public connectcheck() { InitializeComponent(); } private void button1_C.. 2022. 3. 20. 56. 쓰레드2(Task) 앞장들에서 배운 Thread 외에도 비교적 최근에 만들어진 Task 클래스로도 멀티쓰레드 프로그램을 만들수 있다. 둘의 차이점은 thread 는 비교적 큰 작업에 사용하고 메인프로세스가 종료되어도 계속 작동하고 , Task 는 비교적 작은 작업에 사용하고 메인 프로그세스가 종료되면 같이 종료 된다 라고 대부분의 글에 되어있다. 개인적으로는 어떤걸 써도 편하고 실수 덜 할만한걸로 사용하는게 좋다고 생각한다. 쓰레드와 태스크는 위에서 말한거 외에도 좀 다른점이 있긴하다. 그림1과 그림2를 비교해보면 그림2가 확실히 자원을 덜 먹는것을 알수 있다. 위쪽은 대량의 쓰레드를 생성하는것이고 아래쪽은 같은작업을 태스크로 한것인데 , 일단 예제부터가 사실 말이 안되긴한다. 프로그램에서 저정도의 쓰레드를 돌릴경우가 과연.. 2022. 2. 27. 55. Action/Func Action 과 Func 를 알아보기전에 지난 부분 잠시 복습을 해보자. 그림1을 보면 바로 지난장에서 학습하던내용이다. 그런데 델리게이트를 꾸준히 선언해줘야 해서 상당히 불편하다. delegate void tempdel(string str); delegate string tempdel2(string str); 선언까지 없애고 그냥 사용하면 되지 않을까 그래서 MS 에서 미리 델리게이트를 선언해놨다. 그림2를 보자. 일단 Action 을 입력하면 두가지 사용가능한 형태가 보인다. 둘다 미리정의된 델리게이트이며 각각 설명이 나와있다. 일단 Action 은 void 반환에 파라미터가 없는 델리게이트 이다. 그리고 아래에 있는 제네릭 형태의 Action 은 파라미터를 받고 void 를 반환하는 형태다. voi.. 2022. 2. 22. 54. 람다식 앞장에서 무명메서드를 통해 델리게이트를 간단히 사용하는 방법을 알아 봤다. 람다식이란것을 사용하면 더 축약이 가능하다. 그런데 이렇게 줄이는것에 대한 단점도 분명히 있다. 디버깅시 소스가 실행되는 경로를 따라가기가 힘들어진다. 일단 쓰레드 자체가 디버깅도 힘든상태인데 소스가 계속 축약되다보니 나중에 다른사람이 소스를 받거나 현장에서 즉대응해야할경우 아무래도 기본소스보다 디버깅/수정 속도가 느려지게 된다. 일단 람다식 형식부터 알아보자. 대리자타입 변수명 = (파라미터) => 함수코드 기본형태는 이런데 실제 소스코드로 확인해보자. 그림1은 이제까지 진행하던 내용까지 합쳐서 테스트해놓은 내용이다. 여기서 하나씩 살펴보자. #if del1 //기본델리게이트 호출 tempdel td = new tempdel(t.. 2022. 2. 17. 53. 무명메서드 앞장에서 델리게이트를 잠시 살펴봤으니 다시 쓰레드로 넘어가보자. 그림1을 보고 잠시 생각해보자. Thread 를 사용하기 위해 객체로 만들면 파라미터로 ThreadStart 나 ParameterizedThreadStart 를 요구한다. 둘다 객체로 만들어서 파라미터로 넘기면 되는데 마우스를 올려보면 둘다 델리게이트 인것을 알수 있다. ParameterizedThreadStart 같은경우는 void 형(반환이 없는형태) 이고 object 를 인자로 받는 함수를 대리호출해주는 델리게이트 이다. ThreadStart 같은경우는 void형에 파라미터가 없는 함수를 대리호출해주는 델리게이트이다. 이렇게 쓰레드를 사용하기위해서는 델리게이트가 뭔지 알아야 한다. 결국 그림1 소스 같은경우는 쓰레드를 실행하는데 그쓰레.. 2022. 2. 8. 52. 델리게이트 앞에서 쓰레드의 가장기본적인 형태를 배웠다. 그런데 이쓰레드들을 사용할때 추가적으로 알아야 할것들이 많다. 일단 델리게이트부터 살펴보자. 델리게이트는 함수를 대신 호출해주는것 이라고 생각하면 된다. 함수를 직접호출하면 되지 왜 대신 호출하는게 필요할까 생각할 수 있다. 대부분의 경우 디커플링때문에 필요하다. 잘이해하기 힘든데 우리가 매번사용하는 버튼클릭이벤트를 한번생각해보자. 이벤트는 델리게이트를 랩핑한 클래스인데 일단 델리게이트와 이벤트는 같다고 생각하고 흐름을 따라가보자. 그림1은 우리가 자주 사용하는 기본 버튼클릭형태의 소스이다. 저기서 button1_Click 를 우클릭해서 모든참조찾기를 눌러보자. 그러면 그림1의 아래 부분에 있는 내용이 나온다. 저기서 this.button1.Click += n.. 2022. 2. 5. 51. 쓰레드1(Thread) 피씨는 한번에 여러일을 하는거처럼 사용할 수 있다. 예를 들면 노래를 들으면서 인터넷서핑을 하거나 파일을 다운로드 받으면서 영상을 보거나 하는것들이 있을수 있다. 이렇게 여러가지 작업들을 동시에 수행하는것은 실제로 여러가지를 한번에 동시에 수행하는것이 아니라 하나를 잠시작업하고 아주짧은시간뒤에 다른걸 또 작업하고 이렇게 여러개를 조금씩 계속 실행하는것이다. 다시 설명하면 한 가지 일을 하다가, 잠시 멈추고 또 다른 일을 하고, 또 멈추고 다른 일을 하다 보면 언젠가는 결국 모든 일을 마치게 된다. 이 동작이 엄청 빨라지면 한 번에 여러가지 일을 하는 것처럼 보이게 되는 것이다. 이작업을 멀티태스킹이라고 하는데 쓰레드는 다른작업을 시작하게 해주는 역할을 한다. 아래 그림을 보자. 그림1을 보면 메인작업 진.. 2022. 2. 4. 50. 전처리기 / 편의사항 전처리기는 내가 소스를 만들면서 테스트하거나 소스를 편하게 보거나 편의성을 만들수있는 코드이다. 일단 아래 경로를 한번 읽어보자. https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/preprocessor-directives C# 전처리기 지시문 조건부 컴파일, 경고, null 허용 분석 등을 제어하는 다양한 C# 전처리기 지시문을 알아봅니다. docs.microsoft.com 여러가지 내용이 있는데 개인적으로 사용하는것 3가지 정도 밖에없다. 영역정의 , 기호정의 , 조건부컴파일 이정도가 되겠다. 우리가 프로그램을 계속 추가하고 하다보면 당연히 소스코드가 엄청 길어진다. 그런데 일일 내리면서 다보는게 쉽지는 않다. 그래서 디버깅이 힘들어.. 2021. 10. 29. 49. 디버깅 프로그램을 하면서 한번에 코드가 완벽하게 작동하게 만들기는 거의 불가능하다. 물론 간단한 출력프로그램 같은 경우는 그럴일이 없겠지만 대부분의 경우 디버깅이 필요하다. 일단 기본적인 디버깅 방법을 알아보자. 먼저 그림1에서처럼 위쪽 솔로션 구성이 Debug 상태인지 확인한다. 그후 아래 디버그해서 확인할 라인의 앞쪽부분(빨간색동그라미) 를 클릭하면 빨간색 원이 생긴다. 혹은 디버그할 라인을 선택하고 F9 를 누르면 (기본설정일경우) 클릭한것과 마찬가지로 빨간색 원이 생긴다. 빨간색원을 브레이크포인트라고 부르는데 브레이크 포인트는 설정되는 위치가 있고 안되는 위치가 있다. 예를 들면 위그림같은경우 35라인에 브레이크 포인트를 찍으면 거기찍히지 않고 중괄호가 시작되는 36라인에 브레이크 포인트가 찍히게 된다... 2021. 10. 9. 48. 계산기 만들기 ***숙제 : 그림1과 같은 기능을 가지고 있는 계산기를 만들어 보자. 2021. 10. 9. 이전 1 2 3 4 ··· 7 다음