From 92948283ee43731478217c1d74aced021de8bb87 Mon Sep 17 00:00:00 2001 From: Christian Hollinger <6397962+chollinger93@users.noreply.github.com> Date: Mon, 14 Dec 2020 23:43:06 +0000 Subject: [PATCH] Development (#6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * First prep-work for client AND server-side ImageDetectorPlugins * Callback for image detector plugins added * Callback logic now manages to correctly identify client and server * Enabling Docker Support (#5) * Initial dockerfile version * Bugfixes around unit-testing for move to REQ/REP pattern and addtl logging * Further bugfixes w/ detection threshold, new default warning files * docker-compose * Various Docker updates of unknown origins ¯\_(ツ)_/¯ * Audio plugin working w/ docker * Changelog update --- .gitignore | 4 +- CHANGELOG.md | 13 ++- Dockerfile | 41 ++++++++ INSTALL.md | 9 ++ README.md | 97 ++++++++++++++----- conf/config.ini.sample | 23 +++-- conf/logger.ini | 2 +- conf/plugins.d/audio.ini.sample | 11 ++- docker-compose.yml | 48 +++++++++ docs/codecov.svg | 4 +- docs/horizontal-logo-monochromatic-white.png | Bin 0 -> 24928 bytes resources/audio_files/placeholder.mp3 | 0 resources/audio_files/warning.mp3 | Bin 0 -> 14437 bytes resources/audio_files/warning.wav | Bin 0 -> 152782 bytes sbin/install_tensorflow_models.sh | 6 ++ scarecrow_client/client/sender.py | 49 ++++++++-- scarecrow_client/requirements.txt | 3 +- scarecrow_core/plugin_base/base.py | 37 ++++--- scarecrow_core/plugin_base/utils.py | 50 +++++++--- scarecrow_core/plugins/audio.py | 3 +- scarecrow_core/plugins/motion.py | 21 ++++ scarecrow_core/plugins/store_video.py | 3 +- scarecrow_core/tensor_detectors/detector.py | 8 +- scarecrow_core/utilities/utils.py | 13 ++- scarecrow_server/server/receiver.py | 48 +++++---- setup.py | 2 +- tests/test_plugins.py | 6 +- tests/test_receiver.py | 5 +- tests/test_sender.py | 10 +- 29 files changed, 408 insertions(+), 108 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 docs/horizontal-logo-monochromatic-white.png create mode 100644 resources/audio_files/placeholder.mp3 create mode 100644 resources/audio_files/warning.mp3 create mode 100644 resources/audio_files/warning.wav create mode 100644 scarecrow_core/plugins/motion.py diff --git a/.gitignore b/.gitignore index 3ec4124..f65c49b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ ssd_inception* resources/videos/*.mp3 resources/videos/*.mp4 -resources/audio_files/*.mp3 .vscode/ blog_snapshots/* sbin/debian-scripts/ @@ -13,6 +12,9 @@ notebooks/*test*.ipynb *tmp* conf/config.ini conf/plugins.d/*.ini +releases/ +test_conf/ +resources/*.tar.gz # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 961abe4..fcff595 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,18 @@ All changes to the project are documented here. ## [Unreleased] -- Switch to vidgear_async for better performance - pyPI release -- Cleaning up model dependencies from path +- Motion detection code on client to cut down on network bandwidth + +## [0.5] - 2020-12-14 +* Support for easier `Docker` deployment out-of-the-box +* Changed subscriber model to `REQ/REP` +* Simplified path management using `Docker` +* Simplified logging +* Various bugfixes + +## [0.4.2] - 2020-10-04 +* Added support for client plugin callbacks ## [0.4.1] - 2020-08-07 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c7fae15 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +FROM python:3.8-buster + + +# Volumes +VOLUME /config +VOLUME /models +VOLUME /data + +# ZMQ +EXPOSE 5454 +# Audio +EXPOSE 5557 + +# Dir +WORKDIR /tmp + +# Copy setup +COPY README.md ./ +COPY setup.py ./ +COPY sbin/ ./sbin/ +COPY scarecrow_server/ ./scarecrow_server/ +COPY scarecrow_client/ ./scarecrow_client/ +COPY scarecrow_core/ ./scarecrow_core/ +COPY models/ ./models/ + +# Install protoc +RUN apt-get update +RUN apt-get install -y protobuf-compiler alsa-utils + +# Update pip +RUN pip install --upgrade pip +RUN pip install wheel + +# Run setup +RUN pip install . --upgrade + +# Install the models manually to ensure protobuf works +RUN bash ./sbin/install_tensorflow_models.sh + +# Start +ENTRYPOINT ["/usr/local/bin/python3"] \ No newline at end of file diff --git a/INSTALL.md b/INSTALL.md index 2ebd9ac..b91b1f4 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -8,6 +8,15 @@ pip3 install wheel pip3 install . --upgrade ``` +# Using Docker (recommended) + +![Docker](./docs/horizontal-logo-monochromatic-white.png) + +Using `Docker` is the preferred way of running `scarecrow`, as it handles dependencies internally and operates within a controllable environment. + +**Please see [README.md](README.md) for details** + + # Manual If for some reason, the `setup.py` does not work, the steps below show the manual installation route. diff --git a/README.md b/README.md index 89c92c6..3965fa3 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Based on the detection criteria, a **plugin model** allows to trigger downstream *Based on my [blog](https://chollinger.com/blog/2019/12/tensorflow-on-edge-or-building-a-smart-security-camera-with-a-raspberry-pi/).* -## Architecture +# Architecture ![Architecture](./docs/architecture.png) ![Sample](./docs/cam_1.png) @@ -16,9 +16,31 @@ Based on the detection criteria, a **plugin model** allows to trigger downstream *You can change this behavior by relying on a local `tensorflor` instance and having the `ZMQ` communication run over `localhost`.* -## Updates +# Updates Please see [CHANGELOG.md](./CHANGELOG.md) for details. +# Configuration and data + +Copy `config/config.ini.sample` to `conf/config.ini` with the settings for your Raspberry and server. + +For playing audio, please adjust `conf/plugins.d/audio.ini`. + +``` +[Audio] +Path=../audio_files +``` +For an appropriate path. + +If you want to change the `model`, please check the [Model Zoo](https://github.com/chollinger93/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md). The blog article used the outdated `ssd_mobilenet_v1_coco_2017_11_17`. + +``` +[Tensorflow] +ModelUrl=ssd_mobilenet_v3_large_coco_2019_08_14 +LabelMapPath=./models/research/object_detection/data/mscoco_label_map.pbtxt +``` + +# Installing + ## Requirements This project requires: * A Raspberry Pi + the camera module v2 (the `client`) @@ -26,48 +48,79 @@ This project requires: ![Pi](./docs/pi.jpg) -## Install -`scarecrow-cam` can be installed using pip: + +## Using Docker (recommended) + +![Docker](./docs/horizontal-logo-monochromatic-white.png) + +Using `Docker` is the preferred way of running `scarecrow`, as it handles dependencies internally and operates within a controllable environment. + +### Build Image ``` -pip3 install . --upgrade +git submodule update --init --recursive && git submodule update --remote +docker build . -t scarecrow ``` -Please see [INSTALL.md](./INSTALL.md) for details and troubleshooting. +### Run separately +Both `client` and `server` containers should be ran separately. -## Configuration and data -Copy `config/config.ini.sample` to `conf/config.ini` with the settings for your Raspberry and server. +#### Server +This runs `tensorflow` and opens the `zmq` listener. +``` +docker run -it \ + --name scarecrow_server \ + -p 5455:5454 \ + --ipc=host \ + -v $(pwd)/conf:/config \ + -v $(pwd)/models/research/object_detection/data:/models \ + scarecrow \ + /usr/local/bin/scarecrow_server --config /config +``` -For playing audio, please adjust `conf/plugins.d/audio.ini`. +#### Client +*Check cameras in `/dev` with `ffplay /dev/video$x`* ``` -[Audio] -Path=../audio_files +docker run -it \ + --name scarecrow_client \ + -p 5454:5454 \ + -p 5558:5558 \ + --ipc=host \ + -v $(pwd)/conf:/config \ + -v $(pwd)/resources/audio_files:/data \ + --device /dev/snd:/dev/snd \ + --device=/dev/video2:/dev/video0 \ + scarecrow \ + /usr/local/bin/scarecrow_client --config /config --input 0 ``` -For an appropriate path. -If you want to change the `model`, please check the [Model Zoo](https://github.com/chollinger93/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md). The blog article used the outdated `ssd_mobilenet_v1_coco_2017_11_17`. +### Docker Compose +**Experimental** +``` +docker-compose up +``` +## Manual install (advanced) +`scarecrow-cam` can be installed using pip: ``` -[Tensorflow] -ModelUrl=ssd_mobilenet_v3_large_coco_2019_08_14 -LabelMapPath=./models/research/object_detection/data/mscoco_label_map.pbtxt +pip3 install . --upgrade ``` -## Run +Please see [INSTALL.md](./INSTALL.md) for details and troubleshooting. -### On the raspberry +### Run (RasPi) ``` scarecrow_client --config ./conf --input 0 # for picam scarecrow_client --config ./conf --input ./resources/tests/walking_test_5s.mp4 # for local video ``` -### On the server +### Run (Server) ``` scarecrow_server --config ./conf ``` -## Plugins +# Plugins A plugin model allows to trigger downstream actions. These actions are triggered based on the configuration. Plugins can be enabled by setting the following in `config.ini`: @@ -84,8 +137,8 @@ Currently, the following plugins are avaibale: | `audio` | Plays audio files once a person is detected | Either `playsound`, `pygame`, or `omxplayer` | `conf/plugins.d/audio.ini` | `ZMQ` | | `store_video` | Stores video files on the server, with a defined buffer or length | `Path` and `Encoding` settings | `conf/plugins.d/store_video.ini` | `ZServerMQ` | -## How to contribute +# How to contribute This project is in an **early state of development**. Therefore, there are several open items that need to be covered. Please see [TODO](TODO.md) for details. -## License +# License This project is licensed under the GNU GPLv3 License - see the [LICENSE](LICENSE) file for details. \ No newline at end of file diff --git a/conf/config.ini.sample b/conf/config.ini.sample index c00a874..7fcd468 100644 --- a/conf/config.ini.sample +++ b/conf/config.ini.sample @@ -1,7 +1,7 @@ # Overall configuration file [Video] -FPS=20 +FPS=15 [Detection] min_detections=10 @@ -9,25 +9,32 @@ min_confidence=0.7 ; If enabled, sets a threshold in seconds for how long the detection will pause after a detection; -1 = disabled DetectionStopThresholdSeconds=20 +# This is the receiver / subscriber +# The server uses this to receive messages [ZmqCamera] -IP=127.0.0.1 +# This is left blank, as it will always bind to `*` +IP= Port=5454 Protocol=tcp ; 0=zmq.PAIR, 1=zmq.REQ/zmq.REP; 2=zmq.PUB,zmq.SUB Pattern=1 +# This is the publisher, i.e. the camera [ZmqServer] -IP=127.0.0.1 -Port=5454 +# In other words, this is the IP of the camera, despite the name +# TODO: change that... +IP=192.xxx.x.xxx +Port=5455 Protocol=tcp ; 0=zmq.PAIR, 1=zmq.REQ/zmq.REP; 2=zmq.PUB,zmq.SUB Pattern=1 [Tensorflow] ModelUrl=ssdlite_mobilenet_v2_coco_2018_05_09 -LabelMapPath=models/research/object_detection/data/mscoco_label_map.pbtxt # Should be an absolute path +# This setting assumes a run with Docker +LabelMapPath=/models/mscoco_complete_label_map.pbtxt [Plugins] -UseSenderThread=False -Enabled=store_video,audio -Disabled= \ No newline at end of file +UseSenderThread=True +Enabled=audio +Disabled=store_video,motion \ No newline at end of file diff --git a/conf/logger.ini b/conf/logger.ini index 3dd45a0..6f41afb 100644 --- a/conf/logger.ini +++ b/conf/logger.ini @@ -10,7 +10,7 @@ keys=color [formatter_color] class=colorlog.ColoredFormatter -format=%(asctime)s %(log_color)s%(levelname)-8s%(reset)s %(bg_blue)s[%(name)s]%(reset)s %(message)s +format=%(asctime)s %(log_color)s%(levelname)-8s%(reset)s %(filename)s:%(funcName)s():%(lineno)d %(bg_blue)s[%(name)s]%(reset)s %(message)s [handlers] keys=stream diff --git a/conf/plugins.d/audio.ini.sample b/conf/plugins.d/audio.ini.sample index d98fee9..d3d4c2a 100644 --- a/conf/plugins.d/audio.ini.sample +++ b/conf/plugins.d/audio.ini.sample @@ -1,11 +1,12 @@ [ZmqSender] -IP=127.0.0.1 -Port=5557 +IP=0.0.0.0 +Port=5558 [ZmqReceiver] -IP=127.0.0.1 -Port=5557 +IP=0.0.0.0 +Port=5558 [Audio] Streamer=pygame -Path=../audio_files \ No newline at end of file +# This setting assumes a run with Docker - needs a file called "warning.wav" +Path=/data \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ae9b246 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +version: '3' +services: + scarecrow-server: + build: . + image: scarecrow + networks: + scarecrow-net: + ipv4_address: 10.1.0.100 + ports: + - "5455:5454" + - "5557:5557" + volumes: + - ./conf:/config + - ./models/research/object_detection/data:/models + command: ["/usr/local/bin/scarecrow_server", "--config", "/config"] + deploy: + restart_policy: + condition: any + + + scarecrow-camera: + build: . + image: scarecrow + networks: + scarecrow-net: + ipv4_address: 10.1.0.101 + ports: + - "5454:5454" + - "5558:5558" + volumes: + - ./conf:/config + - ./resources/audio_files:/data + devices: + - /dev/video2:/dev/video0 + deploy: + restart_policy: + condition: any + command: ["/usr/local/bin/scarecrow_client", "--config", "/config", "--input", "0"] + depends_on: + - scarecrow-server + +networks: + scarecrow-net: + driver: bridge + ipam: + driver: default + config: + - subnet: 10.1.0.0/24 diff --git a/docs/codecov.svg b/docs/codecov.svg index 89026e3..40ca964 100644 --- a/docs/codecov.svg +++ b/docs/codecov.svg @@ -17,7 +17,7 @@ coverage - 59.15% - 59.15% + 59.79% + 59.79% \ No newline at end of file diff --git a/docs/horizontal-logo-monochromatic-white.png b/docs/horizontal-logo-monochromatic-white.png new file mode 100644 index 0000000000000000000000000000000000000000..6eecb6bde89696b5c08b9ce30d56deeb6ff9300f GIT binary patch literal 24928 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 UP?Gn&!S5zDWvz!r|60BHAHQ9q%m4rY literal 0 HcmV?d00001 diff --git a/resources/audio_files/placeholder.mp3 b/resources/audio_files/placeholder.mp3 new file mode 100644 index 0000000..e69de29 diff --git a/resources/audio_files/warning.mp3 b/resources/audio_files/warning.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e65efd038514b0b2fc1b65f316418f0ac362c7bb GIT binary patch literal 14437 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 literal 0 HcmV?d00001 diff --git a/resources/audio_files/warning.wav b/resources/audio_files/warning.wav new file mode 100644 index 0000000000000000000000000000000000000000..1e94468b55c456269b889f8e72c634b446b88115 GIT binary patch literal 152782 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

q85q{s$Su#%D$mNkv(F*M9jsD^+$B; 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⪙N4bg`D0;H27yeHi^irZAv}st%JF(eY8%w#EHByabmA8+TIRE~v&!t$4y2cY3J=I4b9o(LXgcAiSv*gS7 zIyX8mIcO?TzMs|kVP;a*TTPP8)V)W$^Wn63IaYZk|6Pu4PIUTVcIEY~>krb`?*>UY zC-c2nCkp9}tTNsh3`K$YwLJKE-jA36Y+AoR4<{g+|9>D>&q|$3-{B-^#2>}FZ^mZc z&%FG5EE7yb{kfJN^Pv8~F3_ylS?FqC$XrlO@l-5?cJ``g|u=ZpTy${78o0=M#aa?^sJd# zb-5e)-I@G5+Wup)c`)U-Hy_RaAqO4qVp@ks-pXoQFXHI|P7>65-#Wq-)J0UfXE&CO zyur9dD&L5$WiafZ_FvpNdxYhFrSRpKz4@J!d`wpGb;Y!tuMr0$S8F$ zeiEf0D*JJ>85r+i#}R+yDOzx5LBRNa6G;Evc7xTjL{ zYDP`<1zAo|iYSGgk9q6=ik07)R_dLxCH63N$W{*i#u3uUsW@}P%^0tx)ql)9nwR;` z5wp0Sk$Vb@>KLt$8?v!a6%V)%R*L3vWF~<`Fi3r6`p4NWD0x+`;(T<(&O>YZ!Lb9HRY}dI1nrS zb}XOzYa%@|hxewBgKprPy`?pC@n|!T9eMpH)^}6ZXyEsZanp0M^9+Ri=5wc=`A;w{W!CJM^=hj z*)^YPtzTmT^|=RQ+thbX_3U4U1^r24G)~QZJ-P}N=$z(0pMHKZBPHW4OEH(ixh$%E z9}6C$_T3!}_-XnHno#BOt;DBa-}0PfCL8trXDpXfQNNyXKNY^CF7=0rc+mT}anV*e zj|TTSpA{mj1XFu9?QlmUw}w%7%Z;dt~B8yN|w1}BvPO~wv6+AIJzzFC^8%n*B z^?r2l;= zt?&^0z!=#5Ryc!GF#gvv2h<62Dy+IO-u}*v3Eq6}=z%-m7n@zRWVtzafDq;2mF*== zgvTg{%0_CPZXBUP<4HfoDov1ocfMpmw^u|Anwl>XH5>?PCX=to+sNgeS5W z%+66cPMrgs7=4=B4|q!B05TWVY+g9x6mZxV(k>hpPC?d>8$D6JSbcV>u{%-K7dE6N zhJPr%=TwfW-5Z%*eBsn6pa{@cB0y}`Xw9k&*gJ6*H*y(SH3GzI&7P&wbCBhm!I^L8 zGpHLkmw116B$_4MmmB)XtA1^ZT0jJ1q9@Y+BbkRg(@!cNJVRjw^jg|MuW*-|ohB(kA3yYhWu~FE{WFu?q|^&_tCs~g!$;nR1gvg zp-c<{pnACb_xm4jVm`WT>bc+)RUU61*}6Fy86(;;>ha{E)l%90C`xiFtGwYw03AO|$Gh*R0tSYTns9!**He)f7@s(JG zo(c|(Duo{Jx#j=JiZB=8ta-)B1+=DuY7G=B^YcVL?j)E5$i&RTSFM|+;+2!Q=4;VE zt$2Jf2=#;Do+k-Vz3$E$qcRXpfpm;t1pvkl4^*uq@~QSky#uG-iB+E2VigdIduKjK ze0E=Y!zm%W|8M0%rA4=(hCqylS=VCaRO;#6mi1S8z7^#X9T+_gWrZq2GQURORJamT zP)qx{t&cBqBM{W1{*xl#Sqd8-t z!i!fYE+?{vwGh4O?VVF@0bpNpf~|UTcdb>3d}jyq5FLG-IXRow&d1Il$Y;9hRlwm? z#3esT-#8QUZdy0;8?}U77WNEdGDg~K*R&3Y1JUTeh-Ou!IX&woQJt&=Al|Ze@}nSx z%D;64XggMt>!I99>geicDqO^Vs9BuI;X!Zl#s+`SsAT2-I`c$-e znED!<+Rw9T^^UZQM(0CDg1IHDAU<2~@n$}Qdl#C+xS7|V&GS<<-n1+AsG4lKml*4o`V7eI(lP#5o?s%nyi?H?mS-m2rSNa;v)!5rvUk<3bBq{axF>MXRbxWgZ&6kJFOoJj{65)Aus6vw5%j zR5h8N7;DWSYtNoz4)J*O&$R(SRYW@QY;F-8qB!xQ~XW|po+2Oub z<%v#LCGpXp?b&88uoW{_*s*Jf#nDG2SJXRnJ1WRp_f|})cU6Tix?%@yLls>P(7HM* zO0LD1_r}7{X1|WVmYtbL?TIOO*wlEKp;JfWt}HaPo^i2mo*E6}74yIP|E_)&aBPYd zE279IUrAf+Ei^gvUd0qxq?I1Sb#1F&yF0;357Y`63mS-76Qc^}5p}w{?C^&&fYIj7 zFOmPiYSHI8g$WjT+5>LEX(lHsX{Z2KY7_3$b3Xqk0I}bNRbC#2u zepm`CqiT*CTO?%{(Iag~mV*CB?PTrIX=N4M+R-W>Pue#xCmSit)jMO2v^iYDy2l%_ zKWci&m{Bi1`7#(Ee#yLfwRm~GE%nq3zFK6Ip;AvtyH?_G{*F^9dU>lV%}>d%ehPdU{cX{Bd<3W^}T1)v7^YnF<(TO@Q&6x>YNhL|iRF`~k1=g=Ff^cIWabKf3A#46&_R%$Zh^Xc4V!UxMQ`IY>()*Y)=oR>Rwge zo`TJep!s>IPIU(rrIhwN^Y_s>qQ2Y{1i|19`|h3L(!CRy9+$kT?K?% z2N@L=Y25EddsNccUh$c|YRyCU7l>%IViW`ert*jU;f<^sr_8(Ft~C4a9hkFyJ#jsj>638rS(^;H0%OSC!nghTRG8;KQxljbgw57`I%L3Jzmcus7h<2vJ3ct(HdiyJFBQLv&8CVsLOzepNajbnWJ{#$`4+!6isa1o(ne~>RRjE-x=MGDIe!q&D2SR2&YSXpGdv=fsteXGhZ9YQlN0Grb<1Sx zK|oudS_-QuKonJ9ZHoJ)^`P*=ecaL${6(n7Y19{}`B+V2tnX~XYU7ol>SFu#L&>MN#)`z(){csLt@|RO&+ya`I+c8K?91BJ zv08VR+K;DvT1iAUga|{XBA+t1Y^95pe{gA#4~vp3S5JdKlCQOr)Dv1}Y&@IkU0$f2 z9lNzT@PUbTwJ&(E-rDTMwY2M5%+}3XMa?-cGXCNpc~10x?xY|yVeP1V${sV1*7(CK znp>V~+^J0(FUpyIY@XHe3%0^jrqYuQMnS_=tazgCc~nV!z2i00B-4QLR@0c=jQMFS z6OLx~Y-PJ$okr$WscZ|YSECeFTH`2A$@{7(S)0^+e4{-$WNZ7-YS(N>nMIXVu*K>h zPk>l8s8(*=D3Yqh(KjDipM4$tt5UnKQB-%7w{#z?RHH`viPT_ItDufWR5c24Ew(5K zpHegT>`K3@fLeV?^;=n-(FyC+{0HwKH)j-zYTAd0vKaQ>_BoxGDqko{Rw&4+$^wj3 z=p^B=R1Qog}D(YNtPfz_}yH$dEI?-4_odKV?+Jq6ik>#u) zyFmm*`CieqXA4xl)m7vxp7J$|NaeWq#}HfAZ#OPzmeTs-MyEu6#49Kv>a=J{t$`_0 z8Be;yMguhu(DRMNATUN549$Ls`B}*p1QiJ3<%$8_0axY zS$P<-U1|2{i{F$(G)L%(ySB;;`)-wSY!BqpZn%@hSa^?B>Ojm7vr5~%Lo@=h z_UHP_Uj_wl_X^uke={0&mW<)+bvh<99D~qAs_?(@g!K>Qo_a%8&9&{i9gewmu&pJg z?(HN+2_M_1XkZnDY@5neeS(UhcieCu+iG2WpbwEesG=uuuQj`e~_7_X+>+>=O$eXETD*GT(#e?%}BSdST?!# zv39Sg*1y4aoxjO`n`KcqUH6W=hjF^s-~baDsM4?a-x?S`!TOov0Ihn1nXT38*iEye zRc`QmdOS0aK^tE50 zz>3%1+vMS!0fSG;$yDOS`(dVxeEq6-uBYklufJ*TQS2N}C6iHK>WBs%JCas5R8jIw zuyfvVyDl9gZMov=U`A$+`($(~4m)>7MDi^w1G;vt${0Tb`jt~Nx9kC)8Eb#nRS~Ip z#aIyiER%K@%?iR0S($2sj9JFEUujl({6g)DY+UoA%w*R>n<(B-q}uxWW-#RxYKUY| zjG<(YjJwR*{+Y#H;|vi7)MrGFx^~v8y4eN8Agj~rRqFk%sjFVe%@#z_a0{zk;N+^u z{y%A~L!gbWto@j}5v$*1EY{RiS@rb8%64TyV4yV)hiGrq>)jTkC>iS;N9#*qDn<{D zAjY0L7oxO19}d|27f~g+BflQGIip#1Eox8??OIHc0hRYouFC2R+cncQ=qEB2pQ=%r zK`G1hq^ogy>xo8DD!$NoyY19HlG8ybdPnwP>-iDNz8=VI)AUt`)Y&eOJBXFcfyF^)KGRY86#A zD(|5&r%t5Cx$NeuJnv=XYpkwa8J|w=gf}i%?Q0Be#=04`o+xbvg<2Akb8Bg=BjeUY z9`4GSnAhr&L*3i{O{POHP@L~to271D7TT{To56ed8LPuHv0p3v+L9_{)j3rkPyAO; z@@{DE4LQu4+isDXmbK4mTisVplC}2ym@2i{=X!h2t%{NnIVd6??)_0!g!0Mi$>n@R zR%ZHS;BBX|7Tn&wFGknDy1$3@RiCc^9uGb_zC%Q{?ZFgS7FH{>SUJVXzmrk$N#g8a zKAc*9sxOp{u>a+VzO%6v2*#I4h8G#--?*BYb&q!Z6Z3*dKILvQk8%$_ON?f(vUc@< z>awGJt=g9Ay!>Qe1Iz6(ja9(EYIA0gCuVUDU>1&V&s!%8KovuMtBSvPO7-j-QNaS- z59(YZULzGSua9RQr`1}mr;&J{EWh<>HYW19TL*`QO_!Eg* zp(4_Yqata~H%-)wC+WzG(A81uP3lFuUaS?T(5-~?jQ99E)~9t%`j7p%4?QM(s=1l! z0Wy^Fcg=h?j%*LheeIdM)4nwtS5Y?0!(5g{ivd{s%BpHT_3`YI)vp}(b*|3_AwrFql z&yK#jPVsLvZ}gp&b<5cNEUTHAk(K)mvW$Jn*u^Va80Nyt`lzV0f@*2ynnmlCPk^86 zW0YpA``C*t+GI%?OuE3LO0Z_?3vHmh94dlTWj);cw#h82N*_N~@Zn_(Wb(5}tuKiQ@AbI#=K z#wwTNK|zE00wd}>tC{NU)FO#;>XYM+HT>Rr_^tmpxG>?wa1{l@=0qc974+n8xs&x&*M4BN?zw>{Y&(m&UnpH`-_ z&eOb?_ZJmGzSe9VvY=Wmb_)jdUB$hw#r6+JV=ba~6zdq6gZZLAZ3#5sX^Z?DU)sg^ z1DUF-u{a`9cRpM{@v5J+qL-s^R*tV-ZGVt*)#b&O)k4}DV|E_(S@P&w7`s6WbFcE< zwu;WKo;ZUC7>!ZhH|(diIgJ78`}UYZ)KaCUm9yv-VoPrWT$PSt(yjn=x3UYo)wJoE zZ`FC)l(ATg-7FFcy_I&dg2UCS%2VcQ<-!yL^H z@_nu;kyuCVPs6S{C;R>1b)TI!{!w)AT=x^TFVC_xf?d6hxXrt?irN4DEdJ!TZMmq{ z9(M%AHmt(0wn__QXXSvjShcOY03J0=stR}QU_}{ymR?~z_kKTUU08oxa?ck{@Zi(J zJ~B{W_^wf2BCL62KPx>gUGBZ&YWPZ~X zF9Q-~YCGW6?Ek~43d~>Gn)?#_E^fNVicO$Zkx8r6F14orY4@*w!@gDsH-N?*s$#U%HlNJUSFcN`*0KiyeyB=fzWJHP2q?Y&H( z__y~gYn#5lh|dn3r^w-N+E&%H?xaRg+JimoCx}vA!7>gJh0k2s3jTQ*Rq@o8igwQa z{=1kbZ&mlI5-@t;v@64N?pa&yY_;A!{}K6Cg>h}wb`NKQKG$BbiDG{RtVbbnTxYvmhRDz!A#8kN4U(0>0n-!TlJ zQU2{R>eFM_WH3r>rnVQ{YcFrd_*SeE^_b1Wb=IHg|M#(qdjZ?;PMBT0+RbJ>%eUE+ zwN~uB`*F4O)y})pG<3WLEZx?orB&NKv>kff7VYa{kLNRr82fmtqb~EYMP^`7t9`AP zu4R>(7XRdZgD|$RA|anvl(e92Sk@kv%N ztHw;r{$;GSEP2HAd3^uqG}YGll<|V>(jwJxse0*hUw46iuVdG%)UsAIp@-npV3Ztk z@-&B<%FM2<(>5*F|F5-9RlUshu8Ma#*?!kEqhftqYmT>S^3*&xgX~Vl=Ib>?`|g6V zR_v&^l6e|o>K)3>_7y%8J2sDIC1Kgro~5upW#xxEc8?~t)Z1Z-p02H}D^%2X*RHLy zr`C37b(n#ZTHG_;+R+~Ur-v)@)t*E?c6@z(<0kiiZ5?ZOeXvd+`ez^cySTNkmAihA zs4G$xQ^uRvcH7m9p4_fIZWQ64ev;TyE+xW(d((fdtD|V&MP2$|jfP#OXJs8#sLNeD z4#qH_G59(^fxf=#@H_u<{Oj;lpYHF++uQ%-Imb zum8XPd{XP5uC0z>-gQ!&^SgQ7`cqpu>Cg3b{dwBE-A{d`R&`Rl^SgQN?ONma>({*Z z/dev/null 2>&1 && pwd )" ppath=$(pwd) +which protoc +if [[ $? -ne 0 ]]; then + echo "Please install the protobuf-compiler!" + exit 1 +fi + cd "${DIR}/.." # Clone if [ -d "./models/" ]; then diff --git a/scarecrow_client/client/sender.py b/scarecrow_client/client/sender.py index 40e50fa..beeb867 100644 --- a/scarecrow_client/client/sender.py +++ b/scarecrow_client/client/sender.py @@ -1,7 +1,7 @@ # import libraries from vidgear.gears import VideoGear from vidgear.gears import NetGear - +import numpy as np from scarecrow_core.utilities.utils import * from scarecrow_core.plugin_base.utils import * @@ -12,8 +12,23 @@ from scarecrow_core.utilities.utils import get_logger logger = get_logger() +def _conditional_send(server, frame, client_plugins, *args): + # if we have no plugins, don't bother being conditional + _has_ret = False + + for p in client_plugins: + logger.debug('Plugin {} returns data? {}'.format(p.name, p.has_ret)) + if p.has_ret: + _has_ret = True + break + + if _has_ret and True in args: + server.send(frame) + else: + #logger.debug('No ret client plugins, just sending at will') + server.send(frame) -def run_camera(input_str, address, port, protocol, pattern=0, fps=25): +def run_camera(input_str, address, port, protocol, pattern=0, fps=25, client_plugins={}): """Runs the camera, sends messages Args: @@ -29,17 +44,27 @@ def run_camera(input_str, address, port, protocol, pattern=0, fps=25): else: input = input_str + options = {'THREADED_QUEUE_MODE': False} + if address == '': + address = None # Open any video stream; `framerate` here is just for picamera - stream = VideoGear(source=input, framerate=fps).start() + stream = VideoGear(source=input, framerate=fps, **options).start() # server = NetGear() # Locally + netgear_options = {'max_retries': 10, 'request_timeout': 10} server = NetGear(address=address, port=port, protocol=protocol, - pattern=pattern, receive_mode=False, logging=True) + pattern=pattern, receive_mode=False, logging=True, **netgear_options) + # Plugin parsing + c_plugs = load_image_detector_client_plugins(client_plugins) # infinite loop until [Ctrl+C] is pressed + _prev_frame = None while True: # Sleep time.sleep(0.02) + # Client plugins - before + run_image_detector_plugins_before(client_plugins, 'client', None, None, _prev_frame) + try: frame = stream.read() # check if frame is None @@ -47,8 +72,13 @@ def run_camera(input_str, address, port, protocol, pattern=0, fps=25): logger.error('No frame available') break + # Client plugins - after + run_image_detector_plugins_after(client_plugins, 'client', + _conditional_send, [server, frame, c_plugs], np.copy(frame)) + _prev_frame = frame + # send frame to server - server.send(frame) + # server.send(frame) except KeyboardInterrupt: # break the infinite loop @@ -66,6 +96,8 @@ def start(): help='Input file (0 for webcam)') parser.add_argument('--config', '-c', dest='conf_path', type=str, required=True, help='Path to config dir') + import sys + print(f'Args: {sys.argv}') args = parser.parse_args() # Conf conf = configparser.ConfigParser() @@ -77,12 +109,13 @@ def start(): conf.read('{}/config.ini'.format(conf_path)) # Plugin ZMQ threads - start_receiver_plugins(load_plugins( - conf['Plugins']['Enabled'].split(','), conf_path=conf_path+'/plugins.d')) + _proc_plugs = load_plugins( + conf['Plugins']['Enabled'].split(','), conf_path=conf_path+'/plugins.d') + start_receiver_plugins(_proc_plugs) logger.info('Starting camera stream') run_camera(args.in_file, conf['ZmqServer']['IP'], conf['ZmqServer']['Port'], conf['ZmqServer']['Protocol'], - int(conf['ZmqServer']['Pattern']), int(conf['Video']['FPS'])) + int(conf['ZmqServer']['Pattern']), int(conf['Video']['FPS']), client_plugins=_proc_plugs) if __name__ == "__main__": start() \ No newline at end of file diff --git a/scarecrow_client/requirements.txt b/scarecrow_client/requirements.txt index 48a472a..507d5b0 100644 --- a/scarecrow_client/requirements.txt +++ b/scarecrow_client/requirements.txt @@ -11,4 +11,5 @@ pytest-cov==2.8.1 colorlog==4.1.0 asyncio==3.4.3 vidgear==0.1.8 -pycocotools==2.0.1 \ No newline at end of file +pycocotools==2.0.1 +pygame==2.0.0 \ No newline at end of file diff --git a/scarecrow_core/plugin_base/base.py b/scarecrow_core/plugin_base/base.py index 5d37f06..df78d66 100644 --- a/scarecrow_core/plugin_base/base.py +++ b/scarecrow_core/plugin_base/base.py @@ -1,5 +1,5 @@ import zmq - +import time from scarecrow_core.utilities.utils import get_logger logger = get_logger() @@ -7,19 +7,22 @@ class BasePlugin: """Base plugin class """ name = None + mode = None + has_ret = False - def __init__(self, configuration): + def __init__(self, configuration, mode): self.configuration = configuration + self.mode = mode logger.debug('Loaded plugin {}'.format(self.__class__.__name__)) class ImageDetectorBasePlugin(BasePlugin): - """Server plugin that runs before and after the image detection + """Plugin that runs before and after the image detection """ - def __init__(self, configuration): + def __init__(self, configuration, mode): self.configuration = configuration - BasePlugin.__init__(self, configuration) + BasePlugin.__init__(self, configuration, mode) def run_before(self, *args, **kwargs): logger.debug('run_before is not implemented in {}'.format( @@ -31,7 +34,6 @@ def run_after(self, *args, **kwargs): self.__class__.__name__)) pass - class ZmqBasePlugin(BasePlugin): """ZMQ Base plugin to implement sender/receiver plugins @@ -44,11 +46,11 @@ def __init__(self, configuration): self.recv_port = configuration['ZmqReceiver']['Port'] self.send_server = configuration['ZmqSender']['IP'] self.send_port = configuration['ZmqSender']['Port'] - BasePlugin.__init__(self, configuration) + BasePlugin.__init__(self, configuration, mode='client') def on_receive(self, *args, **kwargs): - """Called on receving a message + """Called on receiving a message """ logger.debug('on_receive is not implemented in {}'.format( self.__class__.__name__)) @@ -77,20 +79,29 @@ def start_receiver(self, *args, **kwargs): self.__class__.__name__)) context = zmq.Context() socket = context.socket(zmq.REP) - logger.debug('Binding to {}'.format(self.send_server)) + logger.debug('Binding to {}:{}'.format(self.send_server, self.send_port)) socket.bind('tcp://*:{}'.format(self.send_port)) while True: # Wait for next request from client - message = socket.recv() - self.on_receive(message) - self.process(message) - self.send_ack(socket) + try: + message = socket.recv(zmq.NOBLOCK) + self.on_receive(message) + self.process(message) + except zmq.ZMQError as ze: + # it's fine, NOBLOCK + time.sleep(0.01) + continue + except Exception as e: + logger.exception(e) + # No matter what, acknowledge - otherwise, we're blocking!! + self.send_ack(socket) def start_sender(self, *args, **kwargs): """Starts the main sender loop """ context = zmq.Context() socket = context.socket(zmq.REQ) + logger.debug(f'Starting sender in {self.__class__.__name__} on {self.recv_server}:{self.recv_port}') socket.connect('tcp://{}:{}'.format(self.recv_server, self.recv_port)) self.send(socket) self.on_ack(socket) diff --git a/scarecrow_core/plugin_base/utils.py b/scarecrow_core/plugin_base/utils.py index bfc2211..551c679 100644 --- a/scarecrow_core/plugin_base/utils.py +++ b/scarecrow_core/plugin_base/utils.py @@ -4,6 +4,7 @@ import configparser from scarecrow_core.plugins.audio import AudioPlugin from scarecrow_core.plugins.store_video import StoreVideoPlugin +from scarecrow_core.plugins.motion import MotionDetectionPlugin import inspect from .interceptor import PluginInterceptor from scarecrow_core.utilities.utils import get_logger @@ -11,10 +12,11 @@ # Read config -def load_plugins(plugins, conf_path='../conf/plugins.d'): +def load_plugins(plugins, conf_path): """Loads all plugins defined in `__allowed_plugins__` Args: + plugins (list): Plugins to load conf_path (str): Configuration path Raises: @@ -36,7 +38,7 @@ def load_plugins(plugins, conf_path='../conf/plugins.d'): continue # Check enabled if plugin not in pi.allowed_plugins: - raise NotImplementedError + raise NotImplementedError('Plugin {} not in allowed list: {}'.format(plugin, pi.allowed_plugins)) else: # TODO: enable port conflict scan p = pi.allowed_plugins[plugin] @@ -67,7 +69,7 @@ def start_receiver_plugins(loaded_plugins): p.start() procs.append(p) else: - logger.warning('No ZmqBasePlugins loaded') + logger.debug('No ZmqBasePlugins loaded') return procs def send_messages(loaded_plugins): @@ -80,9 +82,9 @@ def send_messages(loaded_plugins): for se in loaded_plugins['ZmqBasePlugin']: se.start_sender() else: - logger.warning('No ZmqBasePlugins loaded') + logger.debug('No ZmqBasePlugins loaded') -def send_async_messages(loaded_plugins): +def send_async_messages(loaded_plugins, callback=None): """Starts a separate thread to send all messages Args: @@ -95,18 +97,40 @@ def send_async_messages(loaded_plugins): p.daemon = True p.start() else: - logger.warning('No ZmqBasePlugins loaded') + logger.debug('No ZmqBasePlugins loaded') + if callback: + callback() -def run_image_detector_plugins_before(loaded_plugins, *args, **kwargs): +def _run_image_detector_plugin(typ, loaded_plugins, mode, callback=None, callback_args=[], *args, **kwargs): + _cargs = [] + #logger.debug('Loaded Image Detectors in {}: '.format(mode) +str(loaded_plugins)) if 'ImageDetectorBasePlugin' in loaded_plugins: for plugin in loaded_plugins['ImageDetectorBasePlugin']: - plugin.run_before(*args, **kwargs) + logger.debug('run_image_detector_plugins_before mode: {} has {} ?= {}'.format(plugin.name, plugin.mode, mode)) + if plugin.mode == mode: + if typ == 'before': + r = plugin.run_before(*args, **kwargs) + else: + r = plugin.run_after(*args, **kwargs) + logger.debug('Got args: {}'.format(r)) + if r: + _cargs.append(r) else: - logger.warning('No ImageDetectorBasePlugins loaded') + #logger.debug('No ImageDetectorBasePlugins ({}) loaded'.format(mode)) + pass + # Callback + if callback: + callback(*callback_args, *_cargs) -def run_image_detector_plugins_after(loaded_plugins, *args, **kwargs): +def run_image_detector_plugins_before(loaded_plugins, mode, callback, callback_args, *args, **kwargs): + return _run_image_detector_plugin('before', loaded_plugins, mode, callback, callback_args, *args, **kwargs) + +def run_image_detector_plugins_after(loaded_plugins, mode, callback, callback_args, *args, **kwargs): + return _run_image_detector_plugin('after', loaded_plugins, mode, callback, callback_args, *args, **kwargs) + +def load_image_detector_client_plugins(loaded_plugins): + _cplugs = [] if 'ImageDetectorBasePlugin' in loaded_plugins: for plugin in loaded_plugins['ImageDetectorBasePlugin']: - plugin.run_after(*args, **kwargs) - else: - logger.warning('No ImageDetectorBasePlugins loaded') \ No newline at end of file + _cplugs.append(plugin) + return _cplugs \ No newline at end of file diff --git a/scarecrow_core/plugins/audio.py b/scarecrow_core/plugins/audio.py index f44f99a..34b624d 100644 --- a/scarecrow_core/plugins/audio.py +++ b/scarecrow_core/plugins/audio.py @@ -15,7 +15,7 @@ def __init__(self, configuration): def process(self, msg): if msg.decode('ascii') == str(Messages.WARN.value): logger.debug('Playing warning') - self.play_sound('{}/warning.mp3'.format(self.audio_path), self.streamer) + self.play_sound('{}/warning.wav'.format(self.audio_path), self.streamer) elif msg.decode('ascii') == str(Messages.MUSIC.value): logger.debug('Playing Music') self.play_sound('{}/music.mp3'.format(self.audio_path), self.streamer) @@ -28,6 +28,7 @@ def send_ack(self, socket, *args): def send(self, socket, *args): msg = Messages.WARN + logger.debug(f'Sending msg {msg} to {self.recv_server}:{self.recv_port}') socket.send_string(str(msg.value)) def play_sound(self, input, streamer='pygame'): diff --git a/scarecrow_core/plugins/motion.py b/scarecrow_core/plugins/motion.py new file mode 100644 index 0000000..ffb77cd --- /dev/null +++ b/scarecrow_core/plugins/motion.py @@ -0,0 +1,21 @@ +from scarecrow_core.network.messages import Messages +from scarecrow_core.plugin_base.base import * + +from scarecrow_core.utilities.utils import get_logger +logger = get_logger() + +class MotionDetectionPlugin(ImageDetectorBasePlugin): + name = 'motion' + mode = 'client' + has_ret = True + + def __init__(self, configuration): + ImageDetectorBasePlugin.__init__(self, configuration, self.mode) + + def run_before(self, frame): + print('MotionDetectionPlugin run_before') + return True + + def run_after(self, frame): + print('MotionDetectionPlugin run_after') + return True \ No newline at end of file diff --git a/scarecrow_core/plugins/store_video.py b/scarecrow_core/plugins/store_video.py index f3e99e7..6ddfedf 100644 --- a/scarecrow_core/plugins/store_video.py +++ b/scarecrow_core/plugins/store_video.py @@ -9,6 +9,7 @@ class StoreVideoPlugin(ImageDetectorBasePlugin): name = 'store_video' + mode = 'server' def __init__(self, configuration): self.buffer = [] @@ -22,7 +23,7 @@ def __init__(self, configuration): target_len = int(configuration['Video']['TargetLengthSeconds']) self.buffer_size = target_len*self.fps logger.warning('Using TargetLengthSeconds, setting to {}'.format(self.buffer_size)) - ImageDetectorBasePlugin.__init__(self, configuration) + ImageDetectorBasePlugin.__init__(self, configuration, mode=self.mode) def run_after(self, res, ix, confidence, np_det_img): # TODO: SIGTERM handler diff --git a/scarecrow_core/tensor_detectors/detector.py b/scarecrow_core/tensor_detectors/detector.py index f5a79c9..f30fc0e 100644 --- a/scarecrow_core/tensor_detectors/detector.py +++ b/scarecrow_core/tensor_detectors/detector.py @@ -117,7 +117,13 @@ def detect(model, category_index, image_np, i, confidence, min_detections=10, mi use_normalized_coordinates=True, line_thickness=8) - cv2.imshow('object_detection', cv2.resize(image_np, (800, 600))) + # Only if we have an X-Server - not Docker + if 'DISPLAY' in os.environ: + try: + cv2.imshow('object_detection', cv2.resize(image_np, (800, 600))) + except Exception: + pass + # print the most likely if 'detection_scores' not in output_dict or len(category_index) < 1 or len(output_dict['detection_scores']) <= 0: return (False, i, confidence, np_det_img) diff --git a/scarecrow_core/utilities/utils.py b/scarecrow_core/utilities/utils.py index b4b3951..03d51a8 100644 --- a/scarecrow_core/utilities/utils.py +++ b/scarecrow_core/utilities/utils.py @@ -34,11 +34,16 @@ def get_logger(conf_path='../../conf/logger.ini'): file_dir = os.path.split(os.path.realpath(__file__))[0] log_conf = os.path.join(file_dir, conf_path) logging.config.fileConfig(log_conf, disable_existing_loggers=False) - logger = logging.getLogger() + logger = logging.getLogger('scarecrow') + return logger except Exception: - formatter = logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s') + print(f'Cannot find logging config at {conf_path}') + formatter = logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s %(filename)s:%(funcName)s():%(lineno)d - %(message)s') handler = logging.StreamHandler() handler.setFormatter(formatter) - logger = logging.getLogger() + logger = logging.getLogger('scarecrow') + logger.setLevel(logging.DEBUG) + if (logger.hasHandlers()): + logger.handlers.clear() logger.addHandler(handler) - return logger \ No newline at end of file + return logger \ No newline at end of file diff --git a/scarecrow_server/server/receiver.py b/scarecrow_server/server/receiver.py index 7feba2d..ac71837 100644 --- a/scarecrow_server/server/receiver.py +++ b/scarecrow_server/server/receiver.py @@ -33,12 +33,17 @@ def receive(category_index, model, address, port, protocol, pattern=0, min_detec Yields: bool: True for a successful detection """ + if address == '': + address = None + logger.info(f'Attempting to bind to {address}:{port} over {protocol} and pattern {pattern}') + options = {'THREADED_QUEUE_MODE': False} client = NetGear(address=address, port=str(port), protocol=protocol, - pattern=pattern, receive_mode=True, logging=True) # Define netgear client at Server IP address. + pattern=pattern, receive_mode=True, logging=True, **options) # Define netgear client at Server IP address. # For detection thresholds c = 0 if 'detection_threshold' in kwargs and 'fps' in kwargs: + # TODO: this metric is pretty bad - doesn't wait as long as it should THRESHOLD_FRAMES = kwargs.get( 'detection_threshold') * kwargs.get('fps') logger.debug('Using {} frames as {}s threshold'.format( @@ -60,7 +65,7 @@ def receive(category_index, model, address, port, protocol, pattern=0, min_detec logger.debug('Image received') image_np = np.copy(frame) # check if frame is None - if image_np is None: + if frame is None or image_np is None or image_np.size <= 0: logger.error('No frame available') break @@ -70,21 +75,28 @@ def receive(category_index, model, address, port, protocol, pattern=0, min_detec logger.debug('Below threshold, dropping frame at {}'.format(c)) continue - # Server plugins - before - run_image_detector_plugins_before(server_plugins, image_np) - - # Actual detection. - res, i, confidence, np_det_img = detect(model, category_index, image_np, - i, confidence, - min_detections, min_confidence) - if res: - yield True - p_res = res - - # Server plugins - after - run_image_detector_plugins_after( - server_plugins, res, i, confidence, np_det_img) - + try: + # Server plugins - before + run_image_detector_plugins_before(server_plugins, 'server', None, None, image_np) + + # Actual detection. + res, i, confidence, np_det_img = detect(model, category_index, image_np, + i, confidence, + min_detections, min_confidence) + logger.debug(f'Result: {res}, confidence: {confidence}') + if res: + yield True + p_res = res + # Reset offset counter + c = 0 + + # Server plugins - after + run_image_detector_plugins_after( + server_plugins, 'server', None, None, res, i, confidence, np_det_img) + except Exception as e: + logger.exception(e) + continue + key = cv2.waitKey(1) & 0xFF # check for 'q' key-press if key == ord("q"): @@ -133,8 +145,10 @@ def main(conf, conf_path, label_path, **kwargs): **kwargs): logger.debug('Received signal') if kwargs.get('use_sender_thread', False): + logger.debug('use_sender_thread is true') send_async_messages(loaded_plugins) else: + logger.debug('use_sender_thread is false') send_messages(loaded_plugins) # For downstream yield res diff --git a/setup.py b/setup.py index 69e0441..9c2c53b 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ def run(self): setuptools.setup( cmdclass={'install': ShellInstall}, name="scarecrow-cam", - version="0.4.1", + version="0.5.0", author="Christian Hollinger", author_email="christian@chollinger.com", description="A Raspberry Pi powered edge-computing camera setups that runs a Tensorflow object detection model to determine whether a person is on the camera and plays loud audio to scare them off.", diff --git a/tests/test_plugins.py b/tests/test_plugins.py index acc52da..d55afa3 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -51,12 +51,12 @@ def test_start_receiver_plugins(plugs): def test_run_image_detector_plugins_before(plugs): - run_image_detector_plugins_before(ns['loaded_plugins'], load_numpy_img()) + run_image_detector_plugins_before(ns['loaded_plugins'], 'server', None, None, load_numpy_img()) def test_run_image_detector_plugins_after(plugs): run_image_detector_plugins_after( - ns['loaded_plugins'], True, 0, .5, load_numpy_img(RESOURCE_PATH+'/tests/test_img_labels.jpg')) + ns['loaded_plugins'], 'server', None, None, True, 0, .5, load_numpy_img(RESOURCE_PATH+'/tests/test_img_labels.jpg')) def test_run_image_detector_plugins_after_loop(plugs): @@ -79,7 +79,7 @@ def test_run_image_detector_plugins_after_loop(plugs): break ix += 1 run_image_detector_plugins_after( - ns['loaded_plugins'], True, ix, .5, image_np) + ns['loaded_plugins'], 'server', None, None, True, ix, .5, image_np) # Check output path from os import listdir diff --git a/tests/test_receiver.py b/tests/test_receiver.py index 78d3e3a..d450d37 100644 --- a/tests/test_receiver.py +++ b/tests/test_receiver.py @@ -17,6 +17,7 @@ def zmq_args(): args['port'] = '5454' args['protocol'] = 'tcp' args['fps'] = 10 + args['pattern'] = 0 return args @@ -26,7 +27,7 @@ def zmq_sender(zmq_args): framerate=zmq_args['fps']).start() server = NetGear(address=zmq_args['ip'], port=zmq_args['port'], protocol=zmq_args['protocol'], - pattern=0, receive_mode=False, logging=True) + pattern=zmq_args['pattern'], receive_mode=False, logging=True) yield (stream, server) # Close @@ -63,7 +64,7 @@ def test_run_camera(zmq_args, zmq_sender): logger.info('Starting sender') for i in range(5): frame = zmq_sender[0].read() - logger.info('Sending frame') + logger.info(f'Sending frame: {frame[:1]}') zmq_sender[1].send(frame) time.sleep(1) logger.info('Shutdown') diff --git a/tests/test_sender.py b/tests/test_sender.py index 410c8b5..28727ba 100644 --- a/tests/test_sender.py +++ b/tests/test_sender.py @@ -15,6 +15,7 @@ def zmq_args(): args['port'] = '5454' args['protocol'] = 'tcp' args['fps'] = 10 + args['pattern'] = 0 return args @@ -22,7 +23,7 @@ def zmq_args(): def zmq_receiver(zmq_args): client = NetGear(address=zmq_args['ip'], port=zmq_args['port'], protocol=zmq_args['protocol'], - pattern=0, receive_mode=True, logging=True) + pattern=zmq_args['pattern'], receive_mode=True, logging=True) yield client # Close @@ -34,16 +35,21 @@ def test_run_camera(zmq_args, zmq_receiver): zmq_args['ip'], zmq_args['port'], zmq_args['protocol'], + zmq_args['pattern'], zmq_args['fps'], )) p.start() p.Daemon = True # Receive logger.info('Starting receiver') + frames = [] for i in range(5): frame = zmq_receiver.recv() - assert frame is not None logger.info('Image received') + frames.append(frame) time.sleep(1) logger.info('Shutdown') p.terminate() p.join() + assert len(frames) == 5 + for f in frames: + print(f)