Clojure에서 Kinect를 만지십시오.
14048 단어 AdventCalendarClojure
사용 라이브러리
Clojure의 라이브러리로는 Quil 과 Bifocals 을 사용합니다. Bifocals는 OpenNI을 사용하므로 OpenNI 설치도 필요합니다.
Quil
Quil 는 처리 의 Clojure 래퍼입니다.
간결한 코드로 도형을 그릴 수 있는 등, 그래픽적인 출력을 얻을 수 있습니다. 이번에는 Bifocals에서 얻은 Kinect 데이터를 그리는 데 사용합니다.
최신 버전은 1.6.0입니다.
project.clj[quil "1.6.0"]
Bifocals
Bifocals은 Clojure에서 Kinect를 다루는 라이브러리입니다.
Processing에는 simple-openni이라는 유명한 OpenNI 래퍼 라이브러리가 있습니다. Bifocals는 simple-openni의 래퍼 같은 느낌입니다.
최신 버전은 0.1.0입니다.
project.clj[bifocals "0.1.0"]
OpenNI
OpenNI 은 3D 센서용 오픈 소스 SDK입니다. Kinect뿐만 아니라 다양한 3D 센서에 사용할 수 있습니다.
OpenNI는 현재 버전 2 계열이지만, 이번 기사에서는 v1.5.2.23을 사용하고 있습니다. Bifocals에서 OpenNI2를 사용할 수 있는지 확인하지 않았습니다.
OpenNI의 설치 방법은 구그면 여러가지 나오므로 그쪽을 참조해 주세요. 그건 그렇고, Mac + Homebrew 환경이라면 내가 만든 homebrew-openni을 사용하면 쉽습니다! (스테마)
Kinect 방문
ns
에 Quil과 Bifocals를 추가합니다.
(ns cljac16.core
(:require [quil.core :refer :all]
[bifocals.core :as bifocals]))
setup
함수와 스케치의 정의는 다음과 같습니다.
(defn setup []
(smooth)
(frame-rate 30))
(defsketch kinect
:title "Can Haz Kinect!"
:setup setup
:draw draw
:size [640 480])
Depth
거리 이미지를 가져오고 표시하려면 draw
함수에 다음과 같이 씁니다.
(defn draw []
(background 0)
(bifocals/tick)
(image (bifocals/depth-image) 0 0))
draw
함수 내에서 반드시 bifocals.core/tick
를 호출해야 합니다. tick
함수는 Kinect 데이터를 업데이트하므로 매 프레임을 호출합니다.
bifocals.core/depth-image
는 거리 이미지를 Processing의 PImage 인스턴스로 반환합니다. quil.core/image
에 의해 거리 이미지를 표시합니다.
해골 추적
(defn- draw-line
[p1 p2]
(line (:x p1) (:y p1) (:x p2) (:y p2)))
(defn- draw-skeleton
[skeleton]
(let [{:keys [head neck left-shoulder right-shoulder left-elbow right-elbow
left-hand right-hand torso left-hip right-hip left-knee
right-knee left-foot right-foot]}
(bifocals/project-skeleton skeleton)]
(stroke 30 120 180)
(stroke-weight 3)
(draw-line head neck)
(draw-line neck left-shoulder), (draw-line neck right-shoulder)
(draw-line left-shoulder left-elbow), (draw-line right-shoulder right-elbow)
(draw-line left-elbow left-hand), (draw-line right-elbow right-hand)
(draw-line left-shoulder torso), (draw-line right-shoulder torso)
(draw-line torso left-hip), (draw-line torso right-hip)
(draw-line left-hip left-knee), (draw-line right-hip right-knee)
(draw-line left-knee left-foot), (draw-line right-knee right-foot)))
(defn draw []
(background 0)
(bifocals/tick)
(image (bifocals/depth-image) 0 0)
(doseq [skeleton (vals @bifocals/skeletons)]
(draw-skeleton skeleton)))
bifocals.core/skeletons
라는 atom에 화면내에 들어가 있는 인물의 스켈레톤 데이터가 들어 있으므로, 그것을 꺼내 그리기 하고 있습니다.
또한 bifocals.core/project-skeleton
함수는 3D 스켈레톤 좌표를 2D 카메라 좌표계로 변환합니다.
소감
꽤 쉽게 Kinect에 액세스 할 수있었습니다. 이번 기사에서는 거리 화상과 스켈레톤 정보의 취득만을 소개했습니다만, Bifocals의 example 에서는 사람의 수를 검출하는 방법등도 포함되어 있습니다.
조금 신경이 쓰이는 점으로는, Quil나 Bifocals는 최근에는 갱신되어 있지 않고, Processing이나 simple-openni에 추종할 수 없는 것 같습니다. 하지만 Clojure는 Java에 쉽게 액세스 할 수 있으므로 Bifocals를 사용하지 않고 직접 OpenNI의 Java 바인딩을 호출 할 수 있다고 생각합니다.
Kinect나 AR.Drone, Arduino등을 다루는 피지컬 컴퓨팅의 세계에도 Clojure가 더욱 진출해 주면 좋다고 생각합니다.
Reference
이 문제에 관하여(Clojure에서 Kinect를 만지십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/totakke/items/a6a859278d53ff52a2d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[quil "1.6.0"]
[bifocals "0.1.0"]
ns
에 Quil과 Bifocals를 추가합니다.(ns cljac16.core
(:require [quil.core :refer :all]
[bifocals.core :as bifocals]))
setup
함수와 스케치의 정의는 다음과 같습니다.(defn setup []
(smooth)
(frame-rate 30))
(defsketch kinect
:title "Can Haz Kinect!"
:setup setup
:draw draw
:size [640 480])
Depth
거리 이미지를 가져오고 표시하려면
draw
함수에 다음과 같이 씁니다.(defn draw []
(background 0)
(bifocals/tick)
(image (bifocals/depth-image) 0 0))
draw
함수 내에서 반드시 bifocals.core/tick
를 호출해야 합니다. tick
함수는 Kinect 데이터를 업데이트하므로 매 프레임을 호출합니다.bifocals.core/depth-image
는 거리 이미지를 Processing의 PImage 인스턴스로 반환합니다. quil.core/image
에 의해 거리 이미지를 표시합니다.해골 추적
(defn- draw-line
[p1 p2]
(line (:x p1) (:y p1) (:x p2) (:y p2)))
(defn- draw-skeleton
[skeleton]
(let [{:keys [head neck left-shoulder right-shoulder left-elbow right-elbow
left-hand right-hand torso left-hip right-hip left-knee
right-knee left-foot right-foot]}
(bifocals/project-skeleton skeleton)]
(stroke 30 120 180)
(stroke-weight 3)
(draw-line head neck)
(draw-line neck left-shoulder), (draw-line neck right-shoulder)
(draw-line left-shoulder left-elbow), (draw-line right-shoulder right-elbow)
(draw-line left-elbow left-hand), (draw-line right-elbow right-hand)
(draw-line left-shoulder torso), (draw-line right-shoulder torso)
(draw-line torso left-hip), (draw-line torso right-hip)
(draw-line left-hip left-knee), (draw-line right-hip right-knee)
(draw-line left-knee left-foot), (draw-line right-knee right-foot)))
(defn draw []
(background 0)
(bifocals/tick)
(image (bifocals/depth-image) 0 0)
(doseq [skeleton (vals @bifocals/skeletons)]
(draw-skeleton skeleton)))
bifocals.core/skeletons
라는 atom에 화면내에 들어가 있는 인물의 스켈레톤 데이터가 들어 있으므로, 그것을 꺼내 그리기 하고 있습니다.또한
bifocals.core/project-skeleton
함수는 3D 스켈레톤 좌표를 2D 카메라 좌표계로 변환합니다.소감
꽤 쉽게 Kinect에 액세스 할 수있었습니다. 이번 기사에서는 거리 화상과 스켈레톤 정보의 취득만을 소개했습니다만, Bifocals의 example 에서는 사람의 수를 검출하는 방법등도 포함되어 있습니다.
조금 신경이 쓰이는 점으로는, Quil나 Bifocals는 최근에는 갱신되어 있지 않고, Processing이나 simple-openni에 추종할 수 없는 것 같습니다. 하지만 Clojure는 Java에 쉽게 액세스 할 수 있으므로 Bifocals를 사용하지 않고 직접 OpenNI의 Java 바인딩을 호출 할 수 있다고 생각합니다.
Kinect나 AR.Drone, Arduino등을 다루는 피지컬 컴퓨팅의 세계에도 Clojure가 더욱 진출해 주면 좋다고 생각합니다.
Reference
이 문제에 관하여(Clojure에서 Kinect를 만지십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/totakke/items/a6a859278d53ff52a2d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Clojure에서 Kinect를 만지십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/totakke/items/a6a859278d53ff52a2d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)