{"id":391,"date":"2021-05-07T15:41:49","date_gmt":"2021-05-07T06:41:49","guid":{"rendered":"http:\/\/practical.kr\/?p=391"},"modified":"2021-05-07T15:46:09","modified_gmt":"2021-05-07T06:46:09","slug":"ios-swift%ec%97%90%ec%84%9c-opencv-%ec%82%ac%ec%9a%a9","status":"publish","type":"post","link":"http:\/\/practical.kr\/?p=391","title":{"rendered":"iOS\/Swift\uc5d0\uc11c OpenCV \uc0ac\uc6a9"},"content":{"rendered":"\n<p>\uc218\ub144\uc804\uc5d0 iOS\uc5d0\uc11c OpenCV\ub97c \uc774\uc6a9\ud574\uc11c \uc791\uc5c5\uc744 \ud574\ubcf8\uc801\uc774 \uc788\uc5c8\ub294\ub370 \uc0c8\ub85c \uac19\uc740 \uc791\uc740 \uc791\uc5c5\uc744 \ud558\ub824\ub2e4\ubcf4\ub2c8 \ub2e4 \uc78a\uc5b4\ubc84\ub824\uc11c OpenCV \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc124\uce58\ud558\ub294 \uacfc\uc815\uc744 \uc78a\uc5b4\ubc84\ub824\uc11c \uc78a\uc9c0 \uc54a\uae30 \uc704\ud574\uc11c, \uadf8\ub9ac\uace0 \uc0c8\ubc84\uc804\uc758 Swift\/Xcode\uc5d0\uc11c OpenCV\uc640\uc758 \uc5f0\uacb0\uc5d0 \ubb38\uc81c\uac00 \uc5c6\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 \ub2e4\uc2dc \ud55c\ubc88 \ud574\ubcf4\uace0 \uc544\ub798\uc640 \uac19\uc774 \uc815\ub9ac \ud588\ub2e4. <\/p>\n\n\n\n<p class=\"has-large-font-size\">OpenCV \ud504\ub808\uc784\uc6cc\ud06c \ub2e4\uc6b4\ub85c\ub4dc<\/p>\n\n\n\n<p>iOS\uc6a9 OpenCV \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ub2e4\uc6b4 \ubc1b\ub294\ub2e4. OpenCV\uac00 \ubc84\uc804\uc5c5 \ub420\ub54c\ub9c8\ub2e4 \uce5c\uc808\ud558\uac8c\ub3c4 iOS\uc6a9 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ube4c\ub4dc\ud574\uc11c \ub2e4\uc6b4\ubc1b\uc744 \uc218 \uc788\ub3c4\ub85d \uc900\ube44\uac00 \ub418\uc5b4 \uc788\ub2e4. \uc544\ub798 \ub9c1\ud06c\uc5d0\uc11c \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ub2e4\uc6b4 \ubc1b\uc744 \uc218 \uc788\ub2e4. \ud604\uc7ac \ubc84\uc804\uc740 V4,5,2 \ucd5c\uadfc \ubc84\uc804\uc774 \uad49\uc7a5\ud788 \ube60\ub974\uac8c \uc62c\ub77c\uac00\uace0 \uc788\ub2e4. \uba38\uc2e0\ub7ec\ub2dd\uacfc \uad00\ub828\ud55c \uae30\ub2a5\ub4e4\uc774 \ub9ce\uc774 \ucd94\uac00\ub41c\uac83\uc774 \uc6d0\uc778\uc778\ub4ef\ud558\ub2e4.<\/p>\n\n\n\n<p><a href=\"https:\/\/opencv.org\/releases\/\">https:\/\/opencv.org\/releases\/<\/a><\/p>\n\n\n\n<p>\ub2e4\uc6b4 \ubc1b\uc544 \uc555\ucd95\uc744 \ud574\uc81c \ud558\uba74 iOS\uc5d0\uc11c \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud504\ub808\uc784\uc6cc\ud06c \ud615\uc2dd\uc758 \ud30c\uc77c\uacfc \ud3f4\ub354\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"has-large-font-size\">Xcode \uc2e0\uaddc \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131 <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/practical.kr\/wp-content\/uploads\/2021\/05\/scr1.png\" alt=\"\" class=\"wp-image-398\" width=\"612\" height=\"409\"\/><figcaption>\ud504\ub808\uc784\uc6cc\ud06c \ucd94\uac00<\/figcaption><\/figure>\n\n\n\n<p>Xcode\uc5d0\uc11c OpenCV-Test \ub77c\ub294 \uc774\ub984\uc758 \uc2e0\uaddc \ud504\ub85c\uc81d\ud2b8\ub97c \ud558\ub098 \uc0dd\uc131 \ud588\ub2e4. \ub0b4\uac00 \uc4f0\uace0 \uc788\ub294 Xcode\uc758 \ubc84\uc804\uc740 12.5\uc774\ub2e4. \uc704\uc5d0\uc11c \uc555\ucd95 \ud574\uc81c\ud55c OpenCV \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ud3f4\ub354\ub97c \uc0dd\uc131\ud55c \ud504\ub85c\uc81d\ud2b8 \ud3f4\ub354\ub85c \uc774\ub3d9\ud558\uace0 \ud504\ub85c\uc81d\ud2b8\ub97c \uc120\ud0dd\ud558\uace0 [Build Phase] \uc5d0\uc11c Link Binary With Libraries \uc758 + \ubc84\ud2bc\uc744 \ub20c\ub7ec\uc11c \ud504\ub85c\uc81d\ud2b8\uc5d0 \ud3ec\ud568\uc2dc\ud0a8\ub2e4.<\/p>\n\n\n\n<p class=\"has-large-font-size\">\ub798\ud37c\ud074\ub798\uc2a4 \uc0dd\uc131<\/p>\n\n\n\n<p>File \uba54\ub274\uc5d0\uc11c  New -&gt; File..\uc744 \uc120\ud0dd\ud574\uc11c \uc544\ub798 \uadf8\ub9bc\uacfc \uac19\uc740 \uc21c\uc11c\ub85c CVWrapper\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/practical.kr\/wp-content\/uploads\/2021\/05\/scr3.png\" alt=\"\" class=\"wp-image-404\" width=\"533\" height=\"399\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/practical.kr\/wp-content\/uploads\/2021\/05\/scr4-3.png\" alt=\"\" class=\"wp-image-414\" width=\"544\" height=\"407\"\/><\/figure><\/div>\n\n\n\n<p>\uc774\ub54c \uc8fc\uc758\ud560\uc810\uc740 Language \uc5d0 Swift \ub300\uc2e0\uc5d0 Objecitive-C \uc5b8\uc5b4\ub85c \uc120\ud0dd\uc744 \ud574\uc8fc\uc5b4\uc57c\ub9cc\ud55c\ub2e4. Next\ub97c \uc120\ud0dd\ud558\uba74 Xcode\ub294 \uc790\ub3d9\uc73c\ub85c \ube0c\ub9bf\uc9c0 Header \ud30c\uc77c\uc744 \uc0dd\uc131\ud558\uaca0\ub0d0\ub294 \uba54\uc138\uc9c0\ub97c \ubcf4\uc5ec\uc900\ub2e4. Create Bridging Header\ub97c \uc120\ud0dd\ud574\uc11c \ube0c\ub9bf\uc9c0\ud5e4\ub354\ud30c\uc77c\uc744 \uc0dd\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/practical.kr\/wp-content\/uploads\/2021\/05\/scr5.png\" alt=\"\" class=\"wp-image-409\" width=\"349\" height=\"449\"\/><\/figure><\/div>\n\n\n\n<p>\uadf8\ub9ac\uace0 \uc0dd\uc131\ub41c CVWrapper.m \ud30c\uc77c\uc758 \ud655\uc7a5\uc790\ub97c CVWrapper.mm \uc73c\ub85c \ubcc0\uacbd\ud574\uc900\ub2e4.<\/p>\n\n\n\n<p class=\"has-large-font-size\">Prefix Header \ud30c\uc77c \uc0dd\uc131<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/practical.kr\/wp-content\/uploads\/2021\/05\/scr6.png\" alt=\"\" class=\"wp-image-411\" width=\"542\" height=\"406\"\/><\/figure><\/div>\n\n\n\n<p>\uadf8\ub9ac\uace0 \uba54\ub274\uc5d0\uc11c File &#8211; New &#8211; File&#8230; \uc744 \uc120\ud0dd\ud574\uc11c PCH file\uc744 \uc704 \uadf8\ub9bc\uacfc \uac19\uc774 \uc120\ud0dd\ud574\uc11c \uc8fc\uc5b4\uc9c4 \ud30c\uc77c\uba85\uc73c\ub85c \uc0dd\uc131\ud558\uace0 \uc0dd\uc131\ub41c .pch \ud30c\uc77c\uc5d0 \uc544\ub798\uc640 \uac19\uc740 \ucf54\ub4dc\ub97c \uc0bd\uc785\ud55c\ub2e4. <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/\n\/\/  PrefixHeader.pch\n\/\/  OpenCV-Test\n\/\/\n\/\/  Created by Park Billy on 2021\/05\/07.\n\/\/\n\n#ifndef PrefixHeader_pch\n#define PrefixHeader_pch\n\n#ifdef __cplusplus\n#include &lt;opencv2\/opencv.hpp>\n#endif\n\n#endif \/* PrefixHeader_pch *\/\n<\/pre>\n\n\n\n<p>\uc0dd\uc131\ud55c Prefix \ud30c\uc77c\uc744 \ucef4\ud30c\uc77c\ub7ec\uc5d0 \ub4f1\ub85d\ud574 \uc8fc\uc5b4\uc57c \ud558\ub294\ub370 \uc544\ub798\uc758 \uadf8\ub9bc\uacfc \uac19\uc774 Build Settings\uc5d0\uc11c  $(SRCROOT)\/\ud504\ub85c\uc81d\ud2b8\uba85\/PrefixHeader.pch\uc758 \ud615\uc2dd\uc73c\ub85c \ub4f1\ub85d\ud55c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/practical.kr\/wp-content\/uploads\/2021\/05\/scr7.png\" alt=\"\" class=\"wp-image-428\" width=\"608\" height=\"215\"\/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-large-font-size\">OpenCV \ubc84\uc804\ud655\uc778 \ud558\uae30<\/p>\n\n\n\n<p>\uc544\ub798\uc758 \ucf54\ub4dc\ub97c \ucd94\uac00\ud574\uc11c OpenCV\uc758 \ubc84\uc804\uc744 \uac00\uc838\uc624\ub294 \uae30\ub2a5\uc744 \ub9cc\ub4e4\uc5b4 \ubd24\ub2e4. CVWrapper.h \/ CVWrapper.mm <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/\n\/\/  CVWrapper.h\n\/\/  OpenCV-Test\n\/\/\n\/\/  Created by Park Billy on 2021\/05\/07.\n\/\/\n\n#import &lt;Foundation\/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface CVWrapper : NSObject\n\n+ (NSString *)openCVVersion;\n\n@end\n\nNS_ASSUME_NONNULL_END\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/\n\/\/  CVWrapper.mm\n\/\/  OpenCV-Test\n\/\/\n\/\/  Created by Park Billy on 2021\/05\/07.\n\/\/\n\n#import \"CVWrapper.h\"\n#import &lt;opencv2\/opencv.hpp>\n\n@implementation CVWrapper\n\n+ (NSString *)openCVVersion {\n    return [NSString stringWithFormat:@\"OpenCV Version %s\",  CV_VERSION];\n}\n\n@end\n<\/pre>\n\n\n\n<p>ContentView.Swift\uc5d0\uc11c \ub798\ud37c\ud074\ub798\uc2a4\uc758 \ud568\uc218\ub97c \ud638\ucd9c\ud558\uc5ec \uc2e4\uc81c \uc544\uc774\ud3f0 \ud654\uba74\uc5d0 OpenCV \ubc84\uc804\uc744 \ubcf4\uc5ec\uc8fc\ub294 \ucf54\ub4dc\ub97c \uc544\ub798\uc640 \uac19\uc774 \ucd94\uac00\ud588\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/\n\/\/  ContentView.swift\n\/\/  OpenCV-Test\n\/\/\n\/\/  Created by Park Billy on 2021\/05\/07.\n\/\/\n\nimport SwiftUI\n\nstruct ContentView: View {\n    @State var version = \"\"\n    \n    var body: some View {\n        Text(self.version)\n            .padding()\n            .onAppear(){\n                self.version = CVWrapper.openCVVersion()\n            }\n    }\n}<\/pre>\n\n\n\n<p class=\"has-large-font-size\">\uc2e4\ud589\uacb0\uacfc<\/p>\n\n\n\n<p> \uc2e4\ud589 \uacb0\uacfc\ub294 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/practical.kr\/wp-content\/uploads\/2021\/05\/scr8-1.png\" alt=\"\" class=\"wp-image-431\" width=\"354\" height=\"673\"\/><\/figure><\/div>\n\n\n\n<p>\uc2e4\uc81c\ub85c iOS\uc5d0\uc11c OpenCV \uae30\ub2a5\uc744 \ud65c\uc6a9\ud558\ub824\uba74 \uc704\uc758 CVWrapper.h \uc5d0 \ud568\uc218\ub97c \uc815\uc758 \ud558\uace0 CVWrapper.mm\uc5d0 \uae30\ub2a5\uc744 \uad6c\ud604\ud574\uc11c Swift \ucf54\ub4dc\uc5d0\uc11c \ud568\uc218\ub97c \ud638\ucd9c\ud558\ub294 \ubc29\uc2dd\uc73c\ub85c \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"has-large-font-size\">\uc18c\uc2a4\ucf54\ub4dc<\/p>\n\n\n\n<p>\uc544\ub798 \ub9c1\ud06c\uc5d0\uc11c \uc18c\uc2a4 \ucf54\ub4dc\ub97c \ub2e4\uc6b4 \ubc1b\uc744 \uc218 \uc788\ub2e4. \uc774 \ud504\ub85c\uc81d\ud2b8\ub97c \ud14c\uc2a4\ud2b8 \ud558\ub824\uba74 \uc18c\uc2a4\uc5d0 OpenCV \ud504\ub808\uc784\uc6cc\ud06c\ub294 \ud3ec\ud568\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ub2e4\uc6b4 \ubc1b\uc544\uc11c \uc774\uae00\uc758 \uccab\ubc88\uc9f8 \ubd80\ubd84\uacfc \uac19\uc774 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ud3ec\ud568\uc2dc\ucf1c\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/bipark\/opencv_ios_starter\">https:\/\/github.com\/bipark\/opencv_ios_starter<\/a><\/p>\n\n\n\n<p>20210507 \ubc15\ubcd1\uc77c<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc218\ub144\uc804\uc5d0 iOS\uc5d0\uc11c OpenCV\ub97c \uc774\uc6a9\ud574\uc11c \uc791\uc5c5\uc744 \ud574\ubcf8\uc801\uc774 \uc788\uc5c8\ub294\ub370 \uc0c8\ub85c \uac19\uc740 \uc791\uc740 \uc791\uc5c5\uc744 \ud558\ub824\ub2e4\ubcf4\ub2c8 \ub2e4 \uc78a\uc5b4\ubc84\ub824\uc11c OpenCV \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc124\uce58\ud558\ub294 \uacfc\uc815\uc744 \uc78a\uc5b4\ubc84\ub824\uc11c \uc78a\uc9c0 \uc54a\uae30 \uc704\ud574\uc11c, \uadf8\ub9ac\uace0 \uc0c8\ubc84\uc804\uc758 Swift\/Xcode\uc5d0\uc11c OpenCV\uc640\uc758 \uc5f0\uacb0\uc5d0 \ubb38\uc81c\uac00 \uc5c6\ub294\uc9c0 \ud655\uc778\ud558\uae30 \uc704\ud574 \ub2e4\uc2dc \ud55c\ubc88 \ud574\ubcf4\uace0 \uc544\ub798\uc640 \uac19\uc774 \uc815\ub9ac \ud588\ub2e4. OpenCV \ud504\ub808\uc784\uc6cc\ud06c \ub2e4\uc6b4\ub85c\ub4dc iOS\uc6a9 OpenCV \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ub2e4\uc6b4 \ubc1b\ub294\ub2e4. OpenCV\uac00 \ubc84\uc804\uc5c5 \ub420\ub54c\ub9c8\ub2e4 \uce5c\uc808\ud558\uac8c\ub3c4 iOS\uc6a9 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ube4c\ub4dc\ud574\uc11c \ub2e4\uc6b4\ubc1b\uc744 \uc218<\/p>\n<div class=\"more-link\">\n\t\t\t\t <a href=\"http:\/\/practical.kr\/?p=391\" class=\"link-btn theme-btn\"><span>Read More <\/span> <i class=\"fa fa-caret-right\"><\/i><\/a>\n\t\t\t<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[13,26,21,19,27,40],"tags":[],"class_list":["post-391","post","type-post","status-publish","format-standard","hentry","category-ios","category-iphone","category-opencv","category-opensource","category-swift","category-swiftui"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/posts\/391","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/practical.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=391"}],"version-history":[{"count":35,"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/posts\/391\/revisions"}],"predecessor-version":[{"id":437,"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/posts\/391\/revisions\/437"}],"wp:attachment":[{"href":"http:\/\/practical.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=391"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/practical.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=391"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/practical.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=391"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}