Технический форум по робототехнике.
А зачем вообще на отдельные объекты разделять? Нужно сопоставлять то, что видим с тем, что в онтологии (ранее запомненных моделях). Если фрагменты видимого мира будут в чем-то похожи на хранимые, то это - повод для дальнейших умозаключений модулями логики. Но тут еще нужно тщательно все обмозговать.Aseris писал(а):А на щет распознавания, может все в один блок не лепить?? Сперва строим 3Д модель мира что видим (Дальномеры/камера/камкры/усики), а потом это все отправляем в блок распознания, который разделяет уже обьекты.
Запрос 1 - есть ли в БЗ синий квадрат?
Если есть, то внутри каких фигур он ранее встречался?
Запрос 2 - есть ли в БЗ похожий желтый круг?
Ему делить не надо. Я так представляю самообучающегося робота. Вначале весь мир ему кажется чем-то одним большим и непонятным. Затем он начинает выявлять закономерности в т.ч. и зрительные.по мере выявления закономерностей робот улучшает свои знания о мире и может еще лучше делить мир на части. Так, щенок кусает протянутую ладонь с пищей, не отличая ее от пищи. Затем, после наказаний, он начинает постепенно такое разделение делать. Да и мы, когда попадаем в новую обстановку, обычно запоминаем что-то самое общее, а затем научаемся выделять частности. Этот механизм улучшающейся селекции, фильтрации - важнейший.Vorral писал(а):НАводящий вопрос, робота первый раз включили, откуда ему знать что образ который он получил например с камеры, одной (не лезхем пока в 3Д), в виде двумерного масива даных нада поделтить на 2!, отдельных обьекта? да еще и с определенной класификацией?
;=======================================================
;Дата начала разработки 2010.12.05.
;Версия: V1.0.0. 20101205.
;Автор Казаринов В.Г.
;Модуль первичного анализа изображения на основе OpenCV.
;Описание:
;Совместимость: AIAssistant версии 1.1.0.40. и выше
;=======================================================
(defglobal
?*srcimageref* = -1
?*imageLref* = -1
?*imageRref* = -1
?*imageGLref* = -1
?*imageGRref* = -1
?*matrixDLref* = -1
?*matrixDRref* = -1
?*resimageref* = -1
?*imagewidth* = 320
?*imageheight* = 240
?*oldtimer0_0* = 0
?*oldtimer1_0* = 0
?*oldtimer2_0* = 0
?*oldtimer3_0* = 0
?*oldtimer4_0* = 0
?*oldtimer5_0* = 0
)
(deffacts init-data
(phase start))
(definstances formtest1
([FORM1] of GUIFORM
(x 0) (y 20) (width 800) (height 900) (caption ?*Test1FormCaption*) (onclose 0) (borderstyle 2) (bordericons 1 1 1 0 ))
([BUTTON0] of GUIBUTTON
(caption ?*y2*) (x 70) (y 10) (width 50) (height 30) (enable 1) (onclick 0) (onmousedown 0) (onmouseup 0) (parentinstance (instance-address [FORM1]))) ;<
([BUTTON1] of GUIBUTTON
(caption ?*y1*) (x 10) (y 10) (width 50) (height 30) (enable 1) (onclick 0) (onmousedown 0) (onmouseup 0) (parentinstance (instance-address [FORM1]))) ;>
([BUTTON2] of GUIBUTTON
(caption ?*y3*) (x 150) (y 10) (width 50) (height 30) (enable 1) (onclick 0) (onmousedown 0) (onmouseup 0) (parentinstance (instance-address [FORM1]))) ;<
([BUTTON3] of GUIBUTTON
(caption ?*y4*) (x 220) (y 10) (width 50) (height 30) (enable 1) (onclick 0) (onmousedown 0) (onmouseup 0) (parentinstance (instance-address [FORM1]))) ;>
([BUTTON4] of GUIBUTTON
(caption ?*y5*) (x 350) (y 10) (width 50) (height 30) (enable 1) (onclick 0) (onmousedown 0) (onmouseup 0) (parentinstance (instance-address [FORM1]))) ;>
([BUTTON5] of GUIBUTTON
(caption ?*y6*) (x 410) (y 10) (width 50) (height 30) (enable 1) (onclick 0) (onmousedown 0) (onmouseup 0) (parentinstance (instance-address [FORM1]))) ;>
([BUTTON6] of GUIBUTTON
(caption ?*y7*) (x 470) (y 10) (width 100) (height 30) (enable 1) (onclick 0) (onmousedown 0) (onmouseup 0) (parentinstance (instance-address [FORM1])))
([BUTTON7] of GUIBUTTON
(caption ?*y8*) (x 680) (y 10) (width 100) (height 30) (enable 1) (onclick 0) (onmousedown 0) (onmouseup 0) (parentinstance (instance-address [FORM1])))
([BUTTON11] of GUIBUTTON
(caption ?*y21*) (x 680) (y 50) (width 100) (height 30) (enable 1) (onclick 0) (onmousedown 0) (onmouseup 0) (parentinstance (instance-address [FORM1])))
([BUTTON8] of GUIBUTTON
(caption ?*y11*) (x 680) (y 100) (width 100) (height 30) (enable 1) (onclick 0) (parentinstance (instance-address [FORM1])))
([BUTTON9] of GUIBUTTON
(caption ?*y12*) (x 680) (y 140) (width 100) (height 30) (enable 1) (onclick 0) (parentinstance (instance-address [FORM1])))
([BUTTON10] of GUIBUTTON
(caption ?*y9*) (x 680) (y 180) (width 100) (height 30) (enable 1) (onclick 0) (parentinstance (instance-address [FORM1])))
([IMAGEL] of GUIIMAGE
(x 10) (y 60) (width 320) (height 240) (stretch 1) (prop 1) (onload 0) (parentinstance (instance-address [FORM1])))
([IMAGER] of GUIIMAGE
(x 340) (y 60) (width 320) (height 240) (stretch 1) (prop 1) (onload 0) (parentinstance (instance-address [FORM1])))
([IMAGEGL] of GUIIMAGE
(x 10) (y 310) (width 320) (height 240) (stretch 1) (prop 1) (onload 0) (parentinstance (instance-address [FORM1])))
([IMAGEGR] of GUIIMAGE
(x 340) (y 310) (width 320) (height 240) (stretch 1) (prop 1) (onload 0) (parentinstance (instance-address [FORM1])))
([IMAGED] of GUIIMAGE
(x 10) (y 560) (width 320) (height 240) (stretch 1) (prop 1) (onload 0) (parentinstance (instance-address [FORM1])))
([TIMER0_0] of GUITIMER
(interval 500) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер подсчета длительности нажатия BUTTON0
([TIMER0_1] of GUITIMER
(interval 20) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер повторов нажатия BUTTON0
([TIMER1_0] of GUITIMER
(interval 500) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер подсчета длительности нажатия BUTTON1
([TIMER1_1] of GUITIMER
(interval 20) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер повторов нажатия BUTTON1
([TIMER2_0] of GUITIMER
(interval 500) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер подсчета длительности нажатия BUTTON2
([TIMER2_1] of GUITIMER
(interval 20) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер повторов нажатия BUTTON2
([TIMER3_0] of GUITIMER
(interval 500) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер подсчета длительности нажатия BUTTON3
([TIMER3_1] of GUITIMER
(interval 20) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер повторов нажатия BUTTON3
([TIMER4_0] of GUITIMER
(interval 500) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер подсчета длительности нажатия BUTTON4
([TIMER4_1] of GUITIMER
(interval 20) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер повторов нажатия BUTTON4
([TIMER5_0] of GUITIMER
(interval 500) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер подсчета длительности нажатия BUTTON5
([TIMER5_1] of GUITIMER
(interval 20) (enable 0) (parentinstance (instance-address [FORM1]))) ;таймер повторов нажатия BUTTON5
([CVCAMERAL] of CVCAMERA
(numcam 0)) ;Подключиться к первой попавшейся веб-камере
([CVCAMERAR] of CVCAMERA
(numcam 1)) ;Подключиться ко второй попавшейся веб-камере
)
(deffunction stereocorrespondencebmget ()
;/////////////////////////////////
(bind ?stereobmstateref (cv-stereobmstate-create 16 0))
; (bind $?stereobmstate (cv-stereobmstate-get ?stereobmstateref))
; (loop-for-count (?i 1 19) do
; (printout t "$?stereobmstate: " ?i " " (nth$ ?i $?stereobmstate) crlf)
; )
;(cv-stereobmstate-set ?stereobmstateref (replace$ $?stereobmstate 2 2 5))
; (cv-stereobmstate-set ?stereobmstateref (create$ 1 9 31 15 0 16 10 15 0 0 0 0 0 0 0 0 0 0 -1))
;(cv-stereobmstate-set ?stereobmstateref (create$ 1 41 31 41 0 128 10 15 0 0 0 0 0 0 0 0 0 0 -1))
;(cv-stereobmstate-set ?stereobmstateref (create$ 1 27 31 9 0 16 10 15 0 0 0 0 0 0 0 0 0 0 -1))
; (bind $?stereobmstate (cv-stereobmstate-get ?stereobmstateref))
; (loop-for-count (?i 1 19) do
; (printout t "$?stereobmstate: " ?i " " (nth$ ?i $?stereobmstate) crlf)
; )
(cv-stereocorrespondencebm-get ?*imageGLref* ?*imageGRref* ?*matrixDLref* ?stereobmstateref)
(cv-stereobmstate-destroy ?stereobmstateref)
(bind ?disparity_left_visual (cv-matrix-create ?*imagewidth* ?*imageheight* 0)) ; 0- CV_8U
; (cv-array-convertscale ?*matrixDLref* ?disparity_left_visual -16.0 0.0)
(cv-array-normalize ?*matrixDLref* ?disparity_left_visual 0. 256. 32 0)
;(cv-image-save ?disparity_left_visual "C:\\a.bmp")
(cv-array-color-convert ?disparity_left_visual ?*resimageref* 8)
(gui-image-cvimageload (instance-address [IMAGED]) ?*resimageref*)
;/////////////////////////////////
)
;--------------------------------------------------------------------------------------------------------------------
;Функция вывода двух изображений ?*imageLref* и ?*imageRref* в [IMAGEL] и [IMAGER] на форму из одного стереоизображения ?*srcimageref*
;Вх парам:
;Вых: ---.
(deffunction stereoin (?roisetX ?roisetY ?roisetWidth ?roisetHeight ?parallax)
(cv-image-roi-set ?roisetX ?roisetY ?roisetWidth ?roisetHeight ?*srcimageref*)
(cv-array-copy ?*srcimageref* ?*imageRref* 0)
(gui-image-cvimageload (instance-address [IMAGER]) ?*imageRref*)
(cv-image-roi-set (+ ?roisetX ?parallax) ?roisetY ?roisetWidth ?roisetHeight ?*srcimageref*)
(cv-array-copy ?*srcimageref* ?*imageLref* 0)
(gui-image-cvimageload (instance-address [IMAGEL]) ?*imageLref*)
(cv-array-color-convert ?*imageRref* ?*imageGRref* 6)
(cv-array-color-convert ?*imageLref* ?*imageGLref* 6)
;//////////////////
;Гуд
(cv-array-smooth ?*imageGRref* ?*imageGRref* 1 3. 5. 0. 0.)
(cv-array-smooth ?*imageGLref* ?*imageGLref* 1 3. 5. 0. 0.)
;(cv-array-smooth ?*imageGRref* ?*imageGRref* 2 19.2 19.2 0. 0.)
;(cv-array-smooth ?*imageGLref* ?*imageGLref* 2 19.2 19.2 0. 0.)
;(cv-array-dilate ?*imageGRref* ?*imageGRref* 0 1) ;// Утолщаем контуры
;(cv-array-canny ?*imageGRref* ?*imageGRref* 2000. 0. 5) ;// Нах. границы
;(cv-array-dilate ?*imageGLref* ?*imageGLref* 0 1) ;// Утолщаем контуры
;(cv-array-canny ?*imageGLref* ?*imageGLref* 2000. 0. 5) ;// Нах. границы
;//////////////////
(cv-array-color-convert ?*imageGRref* ?*resimageref* 8)
(gui-image-cvimageload (instance-address [IMAGEGR]) ?*resimageref*)
(cv-array-color-convert ?*imageGLref* ?*resimageref* 8)
(gui-image-cvimageload (instance-address [IMAGEGL]) ?*resimageref*)
(stereocorrespondencebmget)
)
(deffunction cameral-queryimage ()
(bind ?cvcameraref (send [CVCAMERAL] get-cvcameraref))
(if (= (cv-camera-queryimage ?cvcameraref) -1) ;попытка запроса у камеры следующего кадра.
then
;не удалось получить снимок
(printout t ?*y15* crlf)
else
;удалось получить снимок
(printout t ?*y16* crlf)
; (if (and (= (send [CVCAMERAL] get-imagewidth) ?*imagewidth*) (= (send [CVCAMERAL] get-imageheight) ?*imageheight*))
; then
; (bind ?*imageLref* (send [CVCAMERAL] get-imageref))
; else
(bind ?tmpimageref (send [CVCAMERAL] get-imageref))
(cv-array-resize ?tmpimageref ?*imageLref* 1)
; )
(if (= (cv-image-origin-get ?*imageLref*) 0)
then
(cv-array-flip ?*imageLref* 0 0)
)
(gui-image-cvimageload (instance-address [IMAGEL]) ?*imageLref*)
(cv-array-color-convert ?*imageLref* ?*imageGLref* 6)
(cv-array-color-convert ?*imageGLref* ?*resimageref* 8)
(gui-image-cvimageload (instance-address [IMAGEGL]) ?*resimageref*)
)
)
(deffunction camerar-queryimage ()
(bind ?cvcameraref (send [CVCAMERAR] get-cvcameraref))
(if (= (cv-camera-queryimage ?cvcameraref) -1) ;попытка запроса у камеры следующего кадра.
then
;не удалось получить снимок
(printout t ?*y15* crlf)
else
;удалось получить снимок
(printout t ?*y16* crlf)
;(bind ?*imageRref* (send [CVCAMERAR] get-imageref))
(bind ?tmpimageref (send [CVCAMERAR] get-imageref))
(cv-array-resize ?tmpimageref ?*imageRref* 1)
(if (= (cv-image-origin-get ?*imageRref*) 0)
then
(cv-array-flip ?*imageRref* 0 0)
)
(gui-image-cvimageload (instance-address [IMAGER]) ?*imageRref*)
(cv-array-color-convert ?*imageRref* ?*imageGRref* 6)
(cv-array-color-convert ?*imageGRref* ?*resimageref* 8)
(gui-image-cvimageload (instance-address [IMAGEGR]) ?*resimageref*)
)
)
(defrule rule-createform1
?num <- (phase start)
=>
(retract ?num)
(mainform-position-set (+ (send [FORM1] get-x) (send [FORM1] get-width)) (send [FORM1] get-y))
(send [FORM1] guiallobjectcreate)
(bind ?*imageRref* (cv-image-create ?*imagewidth* ?*imageheight* 8 3))
(bind ?*imageLref* (cv-image-create ?*imagewidth* ?*imageheight* 8 3))
(bind ?*imageGRref* (cv-image-create ?*imagewidth* ?*imageheight* 8 1))
(bind ?*imageGLref* (cv-image-create ?*imagewidth* ?*imageheight* 8 1))
(bind ?*resimageref* (cv-image-create ?*imagewidth* ?*imageheight* 8 3))
(bind ?*matrixDLref* (cv-matrix-create ?*imagewidth* ?*imageheight* 3)) ; 3- CV_16S
(bind ?*matrixDRref* (cv-matrix-create ?*imagewidth* ?*imageheight* 3))
)
;Правило обработки события кнопки BUTTON11 - Загр.фото
(defrule rule-button11event
(declare (salience 99))
(object (name [BUTTON11]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON11] put-onclick 0)
(bind ?filename (str-cat (system-currentdir-get) "\\dop\\666.jpg")) ; "\\dop\\555.jpg")) ;"\\dop\\left_right.jpg")) ;"\\dop\\1.jpg")) ;"\\dop\\left_right.jpg"))
(bind ?*srcimageref* (cv-image-load -1 ?filename))
(if (> ?*srcimageref* 0)
then
(if (= (cv-image-origin-get ?*srcimageref*) 0)
then
(cv-array-flip ?*srcimageref* 0 0)
)
)
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
)
;Правило обработки события клика кнопки BUTTON0 - >>
(defrule rule-button0event
(declare (salience 99))
(object (name [BUTTON0]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON0] put-onclick 0)
(bind ?*X* (- ?*X* 1))
(if (>= ?*X* 0)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*X* 0)
)
)
;Правило обработки события нажатия кнопки BUTTON0 - Включить таймер
(defrule rule-button0downevent
(declare (salience 99))
(object (name [BUTTON0]) (onmousedown ?xx&:(> ?xx 0)))
=>
(send [BUTTON0] put-onmousedown 0)
(bind ?*oldtimer0_0* (send [TIMER0_0] get-ontimer))
;Включить таймер
(send [TIMER0_0] put-enable 1)
(send [TIMER0_0] guiobjectmodify)
)
;Правило обработки события отжатия кнопки BUTTON0 - Выключить таймер
(defrule rule-button0upevent
(declare (salience 99))
(object (name [BUTTON0]) (onmouseup ?xx&:(> ?xx 0)))
=>
(send [BUTTON0] put-onmouseup 0)
;Выключить таймер
(send [TIMER0_0] put-enable 0)
(send [TIMER0_0] guiobjectmodify)
;Выключить таймер
(send [TIMER0_1] put-enable 0)
(send [TIMER0_1] guiobjectmodify)
)
;Правило обработки события таймера TIMER0_0
(defrule rule-timer0_0event
(declare (salience 9))
(object (name [TIMER0_0]) (ontimer ?aa) (enable 1))
=>
(if (> ?aa ?*oldtimer0_0*)
then
(bind ?*oldtimer0_0* ?aa)
;Выключить таймер
(send [TIMER0_0] put-enable 0)
(send [TIMER0_0] guiobjectmodify)
;Включить таймер
(send [TIMER0_1] put-enable 1)
(send [TIMER0_1] guiobjectmodify)
)
)
;Правило обработки события таймера TIMER0_1
(defrule rule-timer0_1event
(declare (salience 9))
(object (name [TIMER0_1]) (ontimer ?aa) (enable 1))
=>
(bind ?*X* (- ?*X* 1))
(if (>= ?*X* 0)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*X* 0)
)
)
;-------------------------------------------------------
;Правило обработки события кнопки BUTTON1 - <<
(defrule rule-button1event
(declare (salience 99))
(object (name [BUTTON1]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON1] put-onclick 0)
(bind ?*X* (+ ?*X* 1))
(bind ?a (- (cv-image-width-get ?*srcimageref*) ?*imagewidth* ?*parallax*))
(if (<= ?*X* ?a)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*X* ?a)
)
)
;Правило обработки события нажатия кнопки BUTTON1 - Включить таймер
(defrule rule-button1downevent
(declare (salience 99))
(object (name [BUTTON1]) (onmousedown ?xx&:(> ?xx 0)))
=>
(send [BUTTON1] put-onmousedown 0)
(bind ?*oldtimer1_0* (send [TIMER1_0] get-ontimer))
;Включить таймер
(send [TIMER1_0] put-enable 1)
(send [TIMER1_0] guiobjectmodify)
)
;Правило обработки события отжатия кнопки BUTTON1 - Выключить таймер
(defrule rule-button1upevent
(declare (salience 99))
(object (name [BUTTON1]) (onmouseup ?xx&:(> ?xx 0)))
=>
(send [BUTTON1] put-onmouseup 0)
;Выключить таймер
(send [TIMER1_0] put-enable 0)
(send [TIMER1_0] guiobjectmodify)
;Выключить таймер
(send [TIMER1_1] put-enable 0)
(send [TIMER1_1] guiobjectmodify)
)
;Правило обработки события таймера TIMER1_0
(defrule rule-timer1_0event
(declare (salience 9))
(object (name [TIMER1_0]) (ontimer ?aa) (enable 1))
=>
(if (> ?aa ?*oldtimer1_0*)
then
(bind ?*oldtimer1_0* ?aa)
;Выключить таймер
(send [TIMER1_0] put-enable 0)
(send [TIMER1_0] guiobjectmodify)
;Включить таймер
(send [TIMER1_1] put-enable 1)
(send [TIMER1_1] guiobjectmodify)
)
)
;Правило обработки события таймера TIMER1_1
(defrule rule-timer1_1event
(declare (salience 9))
(object (name [TIMER1_1]) (ontimer ?aa) (enable 1))
=>
(bind ?*X* (+ ?*X* 1))
(bind ?a (- (cv-image-width-get ?*srcimageref*) ?*imagewidth* ?*parallax*))
(if (<= ?*X* ?a)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*X* ?a)
)
)
;-------------------------------------------------------
;Правило обработки события кнопки BUTTON2 - <
(defrule rule-button2event
(declare (salience 99))
(object (name [BUTTON2]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON2] put-onclick 0)
(bind ?*parallax* (+ ?*parallax* 1))
(bind ?a (- (cv-image-width-get ?*srcimageref*) ?*imagewidth* ?*X*))
(if (<= ?*parallax* ?a)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*parallax* ?a)
)
)
;Правило обработки события нажатия кнопки BUTTON2 - Включить таймер
(defrule rule-button2downevent
(declare (salience 99))
(object (name [BUTTON2]) (onmousedown ?xx&:(> ?xx 0)))
=>
(send [BUTTON2] put-onmousedown 0)
(bind ?*oldtimer2_0* (send [TIMER2_0] get-ontimer))
;Включить таймер
(send [TIMER2_0] put-enable 1)
(send [TIMER2_0] guiobjectmodify)
)
;Правило обработки события отжатия кнопки BUTTON2 - Выключить таймер
(defrule rule-button2upevent
(declare (salience 99))
(object (name [BUTTON2]) (onmouseup ?xx&:(> ?xx 0)))
=>
(send [BUTTON2] put-onmouseup 0)
;Выключить таймер
(send [TIMER2_0] put-enable 0)
(send [TIMER2_0] guiobjectmodify)
;Выключить таймер
(send [TIMER2_1] put-enable 0)
(send [TIMER2_1] guiobjectmodify)
)
;Правило обработки события таймера TIMER2_0
(defrule rule-timer2_0event
(declare (salience 9))
(object (name [TIMER2_0]) (ontimer ?aa) (enable 1))
=>
(if (> ?aa ?*oldtimer2_0*)
then
(bind ?*oldtimer2_0* ?aa)
;Выключить таймер
(send [TIMER2_0] put-enable 0)
(send [TIMER2_0] guiobjectmodify)
;Включить таймер
(send [TIMER2_1] put-enable 1)
(send [TIMER2_1] guiobjectmodify)
)
)
;Правило обработки события таймера TIMER2_1
(defrule rule-timer2_1event
(declare (salience 9))
(object (name [TIMER2_1]) (ontimer ?aa) (enable 1))
=>
(bind ?*parallax* (+ ?*parallax* 1))
(bind ?a (- (cv-image-width-get ?*srcimageref*) ?*imagewidth* ?*X*))
(if (<= ?*parallax* ?a)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*parallax* ?a)
)
)
;-------------------------------------------------------
;Правило обработки события кнопки BUTTON3 - >
(defrule rule-button3event
(declare (salience 99))
(object (name [BUTTON3]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON3] put-onclick 0)
(bind ?*parallax* (- ?*parallax* 1))
(if (>= ?*parallax* 0)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*parallax* 0)
)
)
;Правило обработки события нажатия кнопки BUTTON3 - Включить таймер
(defrule rule-button3downevent
(declare (salience 99))
(object (name [BUTTON3]) (onmousedown ?xx&:(> ?xx 0)))
=>
(send [BUTTON3] put-onmousedown 0)
(bind ?*oldtimer3_0* (send [TIMER3_0] get-ontimer))
;Включить таймер
(send [TIMER3_0] put-enable 1)
(send [TIMER3_0] guiobjectmodify)
)
;Правило обработки события отжатия кнопки BUTTON3 - Выключить таймер
(defrule rule-button3upevent
(declare (salience 99))
(object (name [BUTTON3]) (onmouseup ?xx&:(> ?xx 0)))
=>
(send [BUTTON3] put-onmouseup 0)
;Выключить таймер
(send [TIMER3_0] put-enable 0)
(send [TIMER3_0] guiobjectmodify)
;Выключить таймер
(send [TIMER3_1] put-enable 0)
(send [TIMER3_1] guiobjectmodify)
)
;Правило обработки события таймера TIMER3_0
(defrule rule-timer3_0event
(declare (salience 9))
(object (name [TIMER3_0]) (ontimer ?aa) (enable 1))
=>
(if (> ?aa ?*oldtimer3_0*)
then
(bind ?*oldtimer3_0* ?aa)
;Выключить таймер
(send [TIMER3_0] put-enable 0)
(send [TIMER3_0] guiobjectmodify)
;Включить таймер
(send [TIMER3_1] put-enable 1)
(send [TIMER3_1] guiobjectmodify)
)
)
;Правило обработки события таймера TIMER1_1
(defrule rule-timer3_1event
(declare (salience 9))
(object (name [TIMER3_1]) (ontimer ?aa) (enable 1))
=>
(bind ?*parallax* (- ?*parallax* 1))
(if (>= ?*parallax* 0)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*parallax* 0)
)
)
;-------------------------------------------------------
;Правило обработки события клика кнопки BUTTON4 - /\
(defrule rule-button4event
(declare (salience 99))
(object (name [BUTTON4]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON4] put-onclick 0)
(bind ?*Y* (- ?*Y* 1))
(if (>= ?*Y* 0)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*Y* 0)
)
)
;Правило обработки события нажатия кнопки BUTTON4 - Включить таймер
(defrule rule-button4downevent
(declare (salience 99))
(object (name [BUTTON4]) (onmousedown ?xx&:(> ?xx 0)))
=>
(send [BUTTON4] put-onmousedown 0)
(bind ?*oldtimer4_0* (send [TIMER4_0] get-ontimer))
;Включить таймер
(send [TIMER4_0] put-enable 1)
(send [TIMER4_0] guiobjectmodify)
)
;Правило обработки события отжатия кнопки BUTTON4 - Выключить таймер
(defrule rule-button4upevent
(declare (salience 99))
(object (name [BUTTON4]) (onmouseup ?xx&:(> ?xx 0)))
=>
(send [BUTTON4] put-onmouseup 0)
;Выключить таймер
(send [TIMER4_0] put-enable 0)
(send [TIMER4_0] guiobjectmodify)
;Выключить таймер
(send [TIMER4_1] put-enable 0)
(send [TIMER4_1] guiobjectmodify)
)
;Правило обработки события таймера TIMER4_0
(defrule rule-timer4_0event
(declare (salience 9))
(object (name [TIMER4_0]) (ontimer ?aa) (enable 1))
=>
(if (> ?aa ?*oldtimer4_0*)
then
(bind ?*oldtimer4_0* ?aa)
;Выключить таймер
(send [TIMER4_0] put-enable 0)
(send [TIMER4_0] guiobjectmodify)
;Включить таймер
(send [TIMER4_1] put-enable 1)
(send [TIMER4_1] guiobjectmodify)
)
)
;Правило обработки события таймера TIMER4_1
(defrule rule-timer4_1event
(declare (salience 9))
(object (name [TIMER4_1]) (ontimer ?aa) (enable 1))
=>
(bind ?*Y* (- ?*Y* 1))
(if (>= ?*Y* 0)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*Y* 0)
)
)
;-------------------------------------------------------
;Правило обработки события кнопки BUTTON5 - \/
(defrule rule-button5event
(declare (salience 99))
(object (name [BUTTON5]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON5] put-onclick 0)
(bind ?*Y* (+ ?*Y* 1))
(bind ?a (- (cv-image-height-get ?*srcimageref*) ?*imageheight*))
(if (<= ?*Y* ?a)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*Y* ?a)
)
)
;Правило обработки события нажатия кнопки BUTTON5 - Включить таймер
(defrule rule-button5downevent
(declare (salience 99))
(object (name [BUTTON5]) (onmousedown ?xx&:(> ?xx 0)))
=>
(send [BUTTON5] put-onmousedown 0)
(bind ?*oldtimer5_0* (send [TIMER5_0] get-ontimer))
;Включить таймер
(send [TIMER5_0] put-enable 1)
(send [TIMER5_0] guiobjectmodify)
)
;Правило обработки события отжатия кнопки BUTTON5 - Выключить таймер
(defrule rule-button5upevent
(declare (salience 99))
(object (name [BUTTON5]) (onmouseup ?xx&:(> ?xx 0)))
=>
(send [BUTTON5] put-onmouseup 0)
;Выключить таймер
(send [TIMER5_0] put-enable 0)
(send [TIMER5_0] guiobjectmodify)
;Выключить таймер
(send [TIMER5_1] put-enable 0)
(send [TIMER5_1] guiobjectmodify)
)
;Правило обработки события таймера TIMER5_0
(defrule rule-timer5_0event
(declare (salience 9))
(object (name [TIMER5_0]) (ontimer ?aa) (enable 1))
=>
(if (> ?aa ?*oldtimer5_0*)
then
(bind ?*oldtimer5_0* ?aa)
;Выключить таймер
(send [TIMER5_0] put-enable 0)
(send [TIMER5_0] guiobjectmodify)
;Включить таймер
(send [TIMER5_1] put-enable 1)
(send [TIMER5_1] guiobjectmodify)
)
)
;Правило обработки события таймера TIMER5_1
(defrule rule-timer5_1event
(declare (salience 9))
(object (name [TIMER5_1]) (ontimer ?aa) (enable 1))
=>
(bind ?*Y* (+ ?*Y* 1))
(bind ?a (- (cv-image-height-get ?*srcimageref*) ?*imageheight*))
(if (<= ?*Y* ?a)
then
(stereoin ?*X* ?*Y* ?*imagewidth* ?*imageheight* ?*parallax*)
else
(bind ?*Y* ?a)
)
)
;-------------------------------------------------------
;Правило обработки события кнопки BUTTON6 - Вычислить GC
(defrule rule-button6event
(declare (salience 99))
(object (name [BUTTON6]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON6] put-onclick 0)
;/////////////////////////////////
(bind ?stereogcstateref (cv-stereogcstate-create 16 2))
;(bind $?stereogcstate (cv-stereogcstate-get ?stereogcstateref))
; (loop-for-count (?i 1 10) do
; (printout t "$?stereogcstate: " ?i " " (nth$ ?i $?stereogcstate) crlf)
;)
; (cv-stereogcstate-set ?stereogcstateref (create$ 5 1 10000 0 16 1))
; (bind $?stereogcstate (cv-stereogcstate-get ?stereogcstateref))
; (loop-for-count (?i 1 10) do
; (printout t "$?stereogcstate: " ?i " " (nth$ ?i $?stereogcstate) crlf)
;)
(cv-stereocorrespondencegc-get ?*imageGLref* ?*imageGRref* ?*matrixDLref* ?*matrixDRref* ?stereogcstateref 0)
(cv-stereogcstate-destroy ?stereogcstateref)
(bind ?disparity_left_visual (cv-matrix-create ?*imagewidth* ?*imageheight* 0)) ; 0- CV_8U
(cv-array-convertscale ?*matrixDLref* ?disparity_left_visual -16.0 0.0)
;(cv-array-normalize ?*matrixDLref* ?disparity_left_visual 0. 256. 32 0)
(cv-array-color-convert ?disparity_left_visual ?*resimageref* 8)
(gui-image-cvimageload (instance-address [IMAGED]) ?*resimageref*)
;/////////////////////////////////
)
;-------------------------------------------------------
;Правило обработки события кнопки BUTTON7 - Вычислить BM
(defrule rule-button7event
(declare (salience 99))
(object (name [BUTTON7]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON7] put-onclick 0)
stereocorrespondencebmget
)
;Правило обработки события нажатия кнопки BUTTON8 - Подключиться к камерам
(defrule rule-button8downevent
(declare (salience 99))
(object (name [BUTTON8]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON8] put-onclick 0)
(if (= (cv-camera-new (instance-address [CVCAMERAL])) -1) ;попытка подключения к камере 0
then
;не удалось подключиться
(printout t ?*y13* crlf)
else
;удалось подключиться
(printout t ?*y14* crlf)
)
(if (= (cv-camera-new (instance-address [CVCAMERAR])) -1) ;попытка подключения к камере 1
then
;не удалось подключиться
(printout t ?*y17* crlf)
else
;удалось подключиться
(printout t ?*y18* crlf)
)
)
;Правило обработки события нажатия кнопки BUTTON9 - отключить камеры
(defrule rule-button9downevent
(declare (salience 99))
(object (name [BUTTON9]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON9] put-onclick 0)
(if (= (cv-camera-destroy (instance-address [CVCAMERAL])) -1) ;попытка отключения от камеры
then
;не удалось отключиться
(printout t ?*y19* crlf)
else
;удалось отключиться
(printout t ?*y20* crlf)
)
(if (= (cv-camera-destroy (instance-address [CVCAMERAR])) -1) ;попытка отключения от камеры
then
;не удалось отключиться
(printout t ?*y19* crlf)
else
;удалось отключиться
(printout t ?*y20* crlf)
)
)
;Правило обработки события кнопки BUTTON10 - снимок
(defrule rule-button10event
(declare (salience 99))
(object (name [BUTTON10]) (onclick ?xx&:(> ?xx 0)))
=>
(send [BUTTON10] put-onclick 0)
(cameral-queryimage)
(camerar-queryimage)
)
;-------------------------------------------------------
;Правило обработки события закрытия формы [FORM1]
(defrule rule-form1closeevent
(declare (salience 99))
(object (name [FORM1]) (onclose 1))
=>
(open "Test1INI.ecl" datINI "w")
(printout datINI "(defglobal" crlf)
(printout datINI " ?*parallax* = " ?*parallax* crlf)
(printout datINI " ?*X* = " ?*X* crlf)
(printout datINI " ?*Y* = " ?*Y* crlf)
(printout datINI " )" crlf)
(close datINI)
(cv-camera-destroy (instance-address [CVCAMERAL]))
(cv-camera-destroy (instance-address [CVCAMERAR]))
(exit)
)