머신 러닝: 윈도우 앱에 적용하는 5가지 방법(파이썬과 델파이)
- 2021-04-30
- Posted by: Narae Kim
- Categories: 기술자료, 메인 노출
- 원문 링크: https://blogs.embarcadero.com/machine-learning-5-ways-to-use-ml-in-your-windows-apps/
- 작성자: 무함마드 하킴(Muhammad Azizul Hakim)
윈도우에서 머신 러닝을 활용하기 위해, 무엇부터 시작해야 할까요?
머신 러닝은 클라우드에서만 활용할 수 있는 기술이 아닙니다. 웹 브라우저나 명령 프롬프트에서 로컬로 실행할 수도 있죠. 마이크로소프트는 최신 윈도우 10 PC에서도 머신 러닝을 활용할 수 있도록 지원합니다. 예를 들자면, 마이크로소프트가 제공하는 파이썬 WinRT를 활용해 윈도우 머신 러닝 애플리케이션을 만들 수 있습니다. 플랫폼과 서비스간의 훈련된 딥 러닝 모델을 공유하는 개방형 표준인 ONNX (Open Neural Network Exchange) 포맷을 생성할 수도 있습니다.
최신 윈도우 10은 다양한 새로운 API들을 제공합니다. 윈도우 애플리케이션에 훈련된 머신 러닝 모델을 적용할 수도 있고, 로컬 GPU를 최대한으로 활용할 수 있어 머신 러닝 애플리케이션 성능을 극대화 할 수도 있습니다.
엠바카데로가 개발한 Python4Delphi (P4D)는 파이썬 사용자들이 델파이 VCL 기능을 활용할 수 있도록 지원해, 파이썬 개발자들도 네이티브 윈도우 앱을 5배까지 빠르게 개발할 수 있습니다. 이러한 통합으로 응답성이 뛰어난 컨트롤들과 윈도우 10 스타일의 최신 GUI를 갖춘 파이썬 머신 러닝 앱 개발도 가능해졌습니다.
Python4Delphi를 활용하면 델파이 애플리케이션을 개발할 때 파이썬을 스크립트 언어로 자유롭게 활용할 수 있습니다. 정말 쉽죠! 굉장히 다양한 데모와 튜토리얼들도 제공합니다. Python4Delphi로 모든 파이썬 기능들, 라이브러리들을 델파이 앱 개발에 적용할 수 있습니다. 윈도우용 머신 러닝 애플리케이션에 뛰어난 GUI를 구축할 수 있는 것이죠.
다음의 내용을 좀 더 살펴볼까요:
5 종류의 파이썬 라이브러리들을 활용해 윈도우 앱에 머신 러닝을 적용하는 방법: Matplotlib, NLTK, Pillow, OpenCV, Keras
위 라이브러리들은 Python4Delphi에서 모두 활용 가능해, 머신 러닝을 갖춘 윈도우 앱 개발이 가능합니다.
필수 구성 요소들: 시작하기 전에, 최신 파이썬을 설치하세요. Python4Delphi를 설치 방법에 따라 설치하세요 (아래 영상 참고)
시작해볼까요?
RAD스튜디오에서 Python4Delphi의 프로젝트 Demo1을 열고 파이선 GUI를 실행해보세요. 폼 위에 Memo 컴포넌트를 두 개 있습니다. 아래쪽 Memo에는 원하는 스크립트를 입력하고, 위쪽 Memo에 결과값이 출력되는 예제입니다. 깃허브(GitHub)에서 Demo1 소스코드를 다운로드 받을 수 있으니, 참고하세요. 델파이가 파이썬 GUI에서 파이썬 코드 실행을 어떻게 관리하는지에 대한 자세한 내용은 여기를 통해 확인할 수 있습니다.
1. 윈도우에서 Python4Delphi에 Matplotlib를 활용해봅시다!
Matploblib는 머신 러닝에 사용되는 파이썬 라이브러리들 중 가장 많이 사용되고 또 가장 오래된 라이브러리 중 하나입니다. 머신 러닝에서 Matplotlib는 데이터 시각화 기술을 제공합니다. 이를 통해 어마어마한 양의 데이터에 대해서도 뛰어난 인사이트를 가질 수 있습니다.
데이터 과학과 분석 기술에 대한 요구가 높은 상황에서 그래픽을 프로그래밍 방식으로 표현하는 것은 많은 분들이 필요로 하는 작업입니다. Matplotlib 라이브러리와 Python4Delphi (P4D)를 함께 사용하면 이 작업을 매우 쉽게 해낼 수 있는 거죠. Matplotlib는 파이썬 스크립트, 파이썬, IPython shell, 웹 애플리케이션 서버, 다양한 그래픽 UI 툴킷에서 사용 가능합니다. 이 글에서는 P4D를 활용해 델파이 VCL에서 파이썬 GUI를 활용해보죠!
Python4Delphi가 정상적으로 설치되었다면, pip나 명령 프롬프트에서 Matplotblib를 확인할 수 있습니다.
1 |
pip install matplotlib |
이산 분포를 시각적으로 보여주는 스택형 수평 막대 차트를 만드는 Matplotlib 예제 코드입니다 (Python4Delphi Demo01 GUI에서 아래쪽 Memo에서 다음의 코드를 실행합니다.)
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 |
import numpy as np import matplotlib.pyplot as plt category_names = ['Strongly disagree', 'Disagree', 'Neither agree nor disagree', 'Agree', 'Strongly agree'] results = { 'Question 1': [10, 15, 17, 32, 26], 'Question 2': [26, 22, 29, 10, 13], 'Question 3': [35, 37, 7, 2, 19], 'Question 4': [32, 11, 9, 15, 33], 'Question 5': [21, 29, 5, 5, 40], 'Question 6': [8, 19, 5, 30, 38] } def survey(results, category_names): """ Parameters ---------- results : dict A mapping from question labels to a list of answers per category. It is assumed all lists contain the same number of entries and that it matches the length of *category_names*. category_names : list of str The category labels. """ labels = list(results.keys()) data = np.array(list(results.values())) data_cum = data.cumsum(axis=1) category_colors = plt.get_cmap('RdYlGn')( np.linspace(0.15, 0.85, data.shape[1])) fig, ax = plt.subplots(figsize=(9.2, 5)) ax.invert_yaxis() ax.xaxis.set_visible(False) ax.set_xlim(0, np.sum(data, axis=1).max()) for i, (colname, color) in enumerate(zip(category_names, category_colors)): widths = data[:, i] starts = data_cum[:, i] - widths ax.barh(labels, widths, left=starts, height=0.5, label=colname, color=color) xcenters = starts + widths / 2 r, g, b, _ = color text_color = 'white' if r * g * b < 0.5 else 'darkgrey' for y, (x, c) in enumerate(zip(xcenters, widths)): ax.text(x, y, str(int(c)), ha='center', va='center', color=text_color) ax.legend(ncol=len(category_names), bbox_to_anchor=(0, 1), loc='lower left', fontsize='small') return fig, ax survey(results, category_names) plt.show() |
Python GUI에서 결과를 확인해볼까요:
Matplotlib는 포괄적인 파이썬 라이브러리로 정적이면서도 애니메이션화 된 응답형의 시각화된 데이터를 표현하는 데 용이합니다. Matplotlib는 여러 플랫폼에 적용 가능하며, 다양한 형식을 지원합니다.
더 자세한 내용을 확인해보세요: https://pythongui.org/learn-to-work-with-real-world-graphics-using-the-python-matplotlib-library-in-a-delphi-windows-app/
2. 윈도우에서 Python4Delphi에 NLTK를 활용해봅시다!
NLTK는 인간 언어 데이터로 파이썬 프로그램을 구축할 수 있는 선도적인 플랫폼입니다. 자연어 처리(NLP, Natural Language Processing)는 넓은 의미에서 컴퓨터 조작까지 포함하고 있다고 볼 수 있습니다. 컴퓨터가 인간의 언어를 이해하고 분석, 조작, 잠재적인 생성까지 할 수 있는 머신 러닝의 한 분야이죠.
NLTK는 WordNet 등 50가지 이상의 언어, 어휘 리소스들을 매우 간편하게 사용할 수 있는 인터페이스를 제공합니다. 업계에서 인정받은 강력한 NLP 라이브러리들을 분류, 토큰화, 파생, 태그 지정, 구문 분석, 의미 추론할 수 있는 구문 처리 라이브러리 모음들이 있으며, 활발한 포럼까지 있죠.
윈도우 GUI 앱에서 텍스트 예측, 문장 구조 분석 및 시각화, 정서 분석(Sentiment Analysis), 성별 분류 등의 자연어 처리 작업을 하고 싶으신가요? 아래 예제에서 이 내용을 다뤄보려고 합니다!
NLTK를 불러옵시다:
1 |
pip install nltk |
일반적으로 자연어 처리 실제 작업은 언어 데이터 또는 언어 모음의 큰 몸체를 활용합니다. 다음의 코드를 사용해 NLTK 데이터셋을 추가해보겠습니다:
1 |
python -m nltk.downloader popular |
다음은 Treebank 언어 모음을 NLTK 데이터를 통해 문장 구조와 문법을 분석할 수 있는 코드 예제입니다:
1 2 3 4 5 |
from nltk.corpus import treebank # Display a parse tree from corpus treebank t = treebank.parsed_sents('wsj_0009.mrg')[0] t.draw() # opens a new window. |
파이썬 GUI에서 결과값을 확인해봅시다.
더 자세한 내용을 확인해보세요: https://pythongui.org/quickly-build-a-python-gui-app-with-powerful-natural-language-processing-capabilities-using-nltk-library-in-a-delphi-windows-app/
3. 윈도우에서 Python4Delphi에 Pillow를 활용해봅시다!
Pillow (또는 PIL)는 파이썬 이미지 라이브러리로 파이썬에 이미지 처리 기능을 추가할 수 있습니다. 정말 다양한 파일 형식들을 지원하고, 효율적인 내부 처리, 강력한 이미지 처리 기능까지 갖추고 있습니다. 대표적인 핵심 이미지 라이브러리는 기본 픽셀 형식으로, 저장된 데이터에 빠르게 액세스할 수 있습니다. 일반적인 이미지 처리 도구 지원 기반이 매우 견고합니다.
Pillow는 사용하기 매우 쉽고 많은 파이썬 사용자들이 선호하는 라이브러리입니다. 이미지 작업을 하는 대부분의 데이터 사이언티스트들이 흔히들 사용합니다. 다양한 이미지 처리 방법을 제공해 특히 컴퓨터 비전 문제에 대한 훈련 데이터 증강에 유용합니다.
이번에는 이미지에 간단한 기하학적 변환 작업을 해보겠습니다. 델파이/C++빌더에서 Pillow 라이브러리를 사용해 Python4Delphi까지 모두 활용해봅시다.
Pillow를 불러옵시다:
1 |
pip install Pillow |
이미지로 기하학적 변환을 수행하는 Pillow 예제 코드입니다 (Python4Delphi Demo01 GUI 예제에서 아래쪽 Memo에 이 코드를 실행해봅시다):
1 2 3 4 5 6 7 8 9 10 11 |
from __future__ import print_function from PIL import Image im = Image.open("C:/Users/YOUR_USERNAME/cat1.jpg") box = (0, 0, 540, 720) region = im.crop(box) region = region.transpose(Image.ROTATE_180) region = region.transpose(Image.FLIP_LEFT_RIGHT) im.paste(region, box) im = im.rotate(45) im.save("C:/Users/YOUR_USERNAME/cat1Rotated.jpg") |
파이썬 GUI에서 결과값을 확인해봅시다.
더 자세한 내용을 확인해보세요: https://pythongui.org/learn-to-build-a-python-gui-for-easily-processing-images-with-pillow-library-in-a-delphi-windows-app/
4. 윈도우에서 Python4Delphi에 OpenCV를 활용해봅시다!
OpenCV (Open Source Computer Vision Library)는 오픈소스 컴퓨터 비전 & 머신 러닝 소프트웨어 라이브러리입니다. OpenCV는 컴퓨터 비전 애플리케이션에 공통의 인프라를 제공하기 위해 개발되었습니다. 일반 상용되는 제품에서 머신 인식을 더욱 빠르게 처리할 수 있습니다. OpenCV는 파이썬 등 다양한 프로그래밍 언어를 지원합니다.
OpenCV에는 2500개 이상의 최적화된 알고리즘이 담겨있습니다. 전통적인 것부터 최첨단의 컴퓨터 비전 & 머신 러닝 알고리즘이 모두 제공됩니다. 이러한 알고리즘은 얼굴 인식, 물체 식별, 영상에서의 움직임 분류, 카메라 움직임 추적, 움직이는 물체 추적, 물체 3D 모델 추출, 스테레오 카메라에서 3D 포인트 클라우드 생성, 전체 화면의 고해상도 이미지 생성, 이미지 데이터로 유사한 이미지 검색 등 굉장히 다양하게 활용됩니다. 플래시를 사용해서 사진에 눈이 빨갛게 나왔다면, 이 부분을 수정하고 눈의 움직임 인지, 풍경 인식, 증강 현실과도 접목할 수 있도록 설정할 수 있습니다.
OpenCV와 Python4Delphi를 활용해 컴퓨터 비전 & 머신 러닝 기능을 갖춘 GUI를 만들어볼까요:
1 |
pip install opencv-python |
이미지의 원근 변환을 적용하는 OpenCV 코드입니다 (Python4Delphi Demo01 GUI 예제에서 아래쪽 Memo에 이 코드를 실행해봅시다) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import cv2 import numpy as np import matplotlib.pyplot as plt image = cv2.imread("C:/Users/YOUR_USERNAME/got.jpg") pts1 = np.float32([[535,145],[625,145],[535,250],[625,250]]) pts2 = np.float32([[0,0],[400,0],[0,400],[400,400]]) M = cv2.getPerspectiveTransform(pts1,pts2) dst = cv2.warpPerspective(image,M,(400,400)) plt.subplot(121),plt.imshow(image),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show() |
파이썬 GUI에서 결과값을 확인해봅시다.
더 자세한 내용을 확인해보세요: https://pythongui.org/learn-to-build-a-python-gui-for-computer-vision-tasks-with-powerful-opencv-library-in-a-delphi-windows-app/
5. 윈도우에서 Python4Delphi에 Keras를 활용해봅시다!
Keras는 파이썬에서 사용할 수 있는 고급 신경망 API입니다. TensorFlow 라이브러리의 인터페이스와 같은 역할을 합니다. 긴밀하게 연결된 TensorFlow 2.0 에코 시스템의 중심인 keras는 데이터 관리부터 하이퍼 파라미터 트레이닝에 이르기까지 머신 러진 워크플로우의 모든 전반적인 단계를 커버합니다.
Keras는 기계가 아닌 인간을 위해 고안된 것으로, 인지 로딩(load) 감소 부분에 있어 가장 뛰어납니다. 일관되면서도 간단한 API를 제공할 뿐만 아니라, 일반적인 사용 사례(use cases)에 필요한 사용자 행위(user actions) 수를 최소화해줍니다. 또한 명확한 오류 메세지를 보여줍니다.
정말 많은 사람들이 사용하고 있을까요? 걱정할 필요가 없죠! Keras는 수많은 관련 문서, 개발자 가이드를 제공합니다. Kaggle에서 제공하는 데이터에 따르면, 딥러닝 프레임워크 중 TOP 5에 꼽히는 프레임워크입니다. KDnuggets 2018 소프트웨어 조사에서 10번째로 많이 사용되는 툴이며, 사용률은 22%에 달합니다. 유럽원자핵공동연구소(CERN), 나사(NASA), NIH 등 전 세계 과학 관련 기구 및 기업들이 실제로 사용하고 있습니다 (네, 바로빅뱅머신이라고 불리는 LHC에도 사용되죠).
심플하면서도 유연성과 강력함까지 갖춘 딥러닝 라이브러리를 찾고 계신가요? 그리고 멋진 GUI를 구축하고 싶다면? 델파이, C++빌더에서 Python4Delphi 라이브러리와 Keras를 활용해 엔터프라이즈급 AI 솔루션을 쉽게 구축하세요.
Keras를 활용해볼까요:
1 |
pip install keras |
딥 러닝에서 많이 언급되는 Kaggle의 Cats vs. Dogs 데이터셋을 활용해볼게요. 이를 시각화하기 위한 Keras 코드 예제는 아래와 같습니다 (Python4Delphi Demo01 GUI 예제에서 아래쪽 Memo에 이 코드를 실행해봅시다):
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 |
import cv2 import numpy as np import matplotlib.pyplot as plt image = cv2.imread("C:/Users/YOUR_USERNAME/got.jpg") pts1 = np.float32([[535,145],[625,145],[535,250],[625,250]]) pts2 = np.float32([[0,0],[400,0],[0,400],[400,400]]) M = cv2.getPerspectiveTransform(pts1,pts2) dst = cv2.warpPerspective(image,M,(400,400)) plt.subplot(121),plt.imshow(image),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show()import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers # Filter out corrupted images import os num_skipped = 0 for folder_name in ("Cat", "Dog"): folder_path = os.path.join("PetImages", folder_name) for fname in os.listdir(folder_path): fpath = os.path.join(folder_path, fname) try: fobj = open(fpath, "rb") is_jfif = tf.compat.as_bytes("JFIF") in fobj.peek(10) finally: fobj.close() if not is_jfif: num_skipped += 1 # Delete corrupted image os.remove(fpath) print("Deleted %d images" % num_skipped) # Split the dataset into the training and validation set image_size = (180, 180) batch_size = 32 train_ds = tf.keras.preprocessing.image_dataset_from_directory( "PetImages", validation_split=0.2, subset="training", seed=1337, image_size=image_size, batch_size=batch_size, ) val_ds = tf.keras.preprocessing.image_dataset_from_directory( "PetImages", validation_split=0.2, subset="validation", seed=1337, image_size=image_size, batch_size=batch_size, ) # Visualize the data import matplotlib.pyplot as plt plt.figure(figsize=(10, 10)) for images, labels in train_ds.take(1): for i in range(9): ax = plt.subplot(3, 3, i + 1) plt.imshow(images[i].numpy().astype("uint8")) plt.title(int(labels[i])) plt.axis("off") plt.show()import cv2 import numpy as np import matplotlib.pyplot as plt image = cv2.imread("C:/Users/YOUR_USERNAME/got.jpg") pts1 = np.float32([[535,145],[625,145],[535,250],[625,250]]) pts2 = np.float32([[0,0],[400,0],[0,400],[400,400]]) M = cv2.getPerspectiveTransform(pts1,pts2) dst = cv2.warpPerspective(image,M,(400,400)) plt.subplot(121),plt.imshow(image),plt.title('Input') plt.subplot(122),plt.imshow(dst),plt.title('Output') plt.show() |
파이썬 GUI에서 결과값을 확인해봅시다.
더 자세한 내용을 확인해보세요: https://pythongui.org/artificial-intelligence-solutions-with-keras-library-in-a-windows-python-app/
더 많은 정보를 알고 싶다면?
- Python4Delphi 활용법을 자세히 다룬 ‘델파이 개발자를 위한 파이썬’을 참고하세요: https://devgear.co.kr/archives/3660
- [깃허브] Python4Delphi 프로젝트 파일들: https://github.com/pyscripter/python4delphi
12.0 12.1 AI AWS C++ c++빌더 chatgpt DelphiCon ios rad서버 RAD스튜디오 UI UIUX UX uxsummit vcl 개발 개발사례 고객사례 기술레터 기술백서 데브옵스 데이터 데이터베이스 델파이 리눅스 마이그레이션 맥 머신러닝 모바일 새버전 샘플 세미나 안드로이드 웹 윈도우 인공지능 인터베이스 출시 커뮤니티에디션 코드 클라우드 파이썬 파이어몽키 현대화