text:
RoadTest: Digilent Zybo Z7 + Pcam 5C
Author: gecoz
Creation date:
Evaluation Type: Development Boards & Tools
Did you receive all parts the manufacturer stated would be included in the package?: True
What other parts do you consider comparable to this product?:
What were the biggest problems encountered?: The Zybo Z7-10 FPGA fabric is too small to be usable for video processing application involving machine learning. The recommended minimum board for such applications is the Z7-20.
Detailed Review:
After I had a chance to review the Digilent Arty-S7 board last year, which introduced me to the Xilinx Spartan-7 FPGA family, when I saw the new Zybo Z7 up for review, I had to apply to give the Zynq architecture a try.
The main motivation behind my application was to test how good the Zynq architecture would perform when applied to machine learning. In particular, since the kit under review included also the Pcam 5C, the platform would be an ideal candidate for a face recognition application, which could leverage both the ARM cores and the FPGA fabric.
Before applying, I had a look at the tools and libraries available from Xilinx and Digilent, supporting both the board and the machine learning algorithms needed, and found many interesting projects, which made me feel confident on the feasibility of the project.
To be honest, going through the board documentation, I did find something suspicious on the Zybo-Z7 migration guide:
reVISION SDSoC Platform
SDSoC and the reVISION libraries make it possible to do FPGA accelerated video processing using openCV functions in an all C/C++ development environment. Digilent will be enabling this design flow on the Zybo Z7-20 by providing a reVISION capable SDSoC platform for it in the future. Those using the ZYBO for video processing (or that are interested in doing so) should consider if migrating a project into SDSoC will enable improvements. For more information on reVISION, see Xilinx's reVISION Zone.
Those interested in using reVISION should migrate to the Zybo Z7-20. The Zybo Z7-10 does not have enough programmable logic resources to properly implement a reVISION platform.
Larger FPGA Option
If you would benefit from having more FPGA resources, you have the option to migrate to the Zybo Z7-20, which includes a much larger ZC7020 Zynq part. The process of migrating to the Zybo Z7-20 is no more difficult than migrating to the Zybo Z7-10, which has the same ZC7010 Zynq part as the ZYBO.
Basic video processing applications designed on the ZYBO or Zybo Z7-10 will often use most of the available resources in the programmable logic. For this reason the Zybo Z7-20 is recommended for those interested in video processing.
I chose to downplay those warnings: after all the roadtest was clearly inviting applications that would involve video processing of some sort (hence the inclusion of the PCAM 5C), and push the Z7-10 board capability to its limits, so I thought those warnings perhaps were just another marketing up-selling technique. Only after quite a lot of struggle I came to realise they were not! But more about this later.
Before getting into the body of my review, I would like to thank rscasny for letting me stretch the roadtest deadline, in order to complete the review (and enjoy my holidays!).
For this roadtest, the kit includes the Digilent Zybo Z7-10 board and Digilent Pcam 5C camera. Both arrived in the Element14 box, nicely protected by pink bubble wrap, each enclosed by the very distinctive Digilent packaging. The Zybo board comes nicely padded in layers of pink foam. The is really very little to add about the packaging, so let's explore each item in more detail, to understand what they have to offer.
This Digilent development board is the upgrade of the ZYBO board. Just like its predecessor, it features a Zynq device (the Z7-10 employs a XC7Z010-1CLG400C) at its core. The Zynq architecture offers a great amount of flexibility, due to the availability of both a dual ARM Cortex-A9 based (@ 667 MHZ) processing system (PS) and the Artix (Z-7010) based FPGA programmable logic (PL).
To match this powerful device, the board provides the following memory: 1 GB DDR3L RAM (with 32-bit bus @1066 MHz), 16 MB Quad SPI Flash and a microSD slot. It also offers plenty of connectivity, via the Gigabit Ethernet, the USB-UART bridge, the USB-JTAG circuitry and the USB 2.0 OTG (On-The-Go). Audio processing is supported thanks to the many connectors available on the Zybo Z7 (line in, microphone and headphones jacks) and the onboard SSM2603 audio codec. Similarly, for the video, there are HDMI input, HDMI output and a MIPI CSI-2 camera port.
As for "wired" GPIO, there are 4 LEDs (green), 1 RGB LED, 4 switches and 6 push buttons, so plenty to play with. And if you need more I/O, the system can be expanded using the 5 Pmod ports available.
The board provides a few jumpers, which can be used to select the power source and the boot mode. For the power, the user can choose between using the USB, or providing an external 5V power source (connected via the power jack or the jumper pins). I ended up using the external power, as I have experienced some issues using the USB connector, due to the limited amount of current available from the laptop USB port, which caused the Zybo to hang randomly.
The board can boot from the microSD card, from the onboard QSPI flash memory or via JTAG. The QSPI flash memory comes preloaded with the OOB demo.
More details on the Zybo Z7 can be found on the Digilent website.
Together with the Zybo, the roadtest included the Digilent Pcam 5C camera. This camera can be connected to the board using the MIPI CSI-2 interface. This serial interface is the standard for attachment of cameras to processors, and it is the same that is used on Raspberry Pi boards. The Pcam 5C has 2 lanes for data (one-way connection), allowing for high speed data transfer from the camera to the board (each lane can support speed up to 1 Gbps). The physical hardware layer interface implements the D-PHY specification, a low-power, high-speed, very scalable specification, which supports any number of data lanes (I'm mentioning those details, as they will be extremely useful when implementing the interface on FPGA).
As for the specification of the camera, the Pcam 5C uses the OV5640 color CMOS image sensor. Such sensor has a 5MP resolution and supports the following video modes: QSXGA@15Hz, 1080p@30Hz, 720p@60Hz, VGA@90Hz and QVGA@120Hz, although Digilent support is only limited to the tested 1080p and 720p modes.
On the camera board there is also a 7-pin header (on the picture on the left, the header is partially covered by the crocodile clip used to hold the board) for access to auxiliary camera signals (like 2 GPIO, auto-focus control signal). The camera comes fitted with M12 lens.
The full specification and extra resources for the Pcam 5C can be found on the Digilenti website.
After introducing the kit, the question is: what can we do with it? As mentioned before, the Zybo Z7-10 employs a Xilinx Zynq architecture, which offers a great amount of flexibility, due to the availability of both a dual ARM Cortex-A9 based processing system (PS) and the Artix (Z-7010) based FPGA programmable logic (PL).
This means the board can be used in any of the following configurations:
Although dependent on which configuration is chosen for the system, the application development workflow for the Zynq can be generalised in the following steps:
To handle the complexity of the tasks, Xilinx offers the following set of development tools, which help with one or more steps of the workflow:
Going into details for each of the above tools is beyond the scope of this review, as each would deserve a book (or more) of its own! If you are interested in learning more, I would urge you to refer to the vast Xilinx bibliography on the subject, but be prepared, the amount of information is huge! Also, Internet and the search engine are you friends: just type the name of the tools and you will be greeted with tens of links, covering just about all the aspects you might be interested in.
Just one remark: the tools are quite powerful, but they are very resource-hungry! You need a decently computer in order to be able to work at a reasonable pace, with plenty of RAM and disk space. I personally use a 16GB machine, with 500GB SSD disk. Also, during the development, you need to make sure you have always plenty of disk space available, as the build by-products can easily eat away many GB (especially if you work on many versions of the tools, many variations of a project and/or decide to go down the Petalinux route).
The Digilent website contains an ample set of resources, including a few demos to be used with the board. In general, the information provided is sufficient to successfully implement the demo, but the only problem is that each demo has been developed using a different version of Vivado, which can cause an headache if you decide to try them all!
Although I have implemented the Video Workshop demo (shown in the picture on the right), I will not include the details in this roadtest, as I think my fellow roadtesters have already made an excellent job in describing them in very fine details, so I would rather point you to read their reviews if you are interested. The rest of the review will instead focus on the project implemented on the Zybo Z7-10.
The idea behind the application for this roadtest was to leverage the Pcam 5C and the Zybo board to build an AI based access control gate. The gate would grant access using face recognition: the person willing to pass across the gate will have to stop in front of the camera, stand still while the recognition algorithm works its magic, and then, if the face is recognised, access will be granted.
To try and match the application to the limited resources available on the Zybo Z7-10, some assumptions will be needed. In particular, the gate will be restricted to allow only one person at time through (a bit like the automated custom passport control checkpoint you find at airports nowadays). This way the neural network can focus on detecting and processing only 1 face per frame, reducing the time required by the computations.
Also, the person will have to stand in front of the camera till their image has been successfully captured and processed. As the time required for face recognition will be in the range of few seconds, this imply the person will have to stand for few seconds. The idea is to use the FPGA fabric to implement hardware acceleration for the neural network processing, thus aiming to achieve performance that would not exceed 5 seconds/person recognition (this figure has been chosen only on basis of a reasonable time response for the system, in order to be of any practical use in real applications).
The access control side of the system will be mocked using the RGB LED available on the board. Each state will have a different colour assigned: blue for face detected, red for denied access and green for granted access.
From a functional point of view, the gate access system can be represented by the following functional blocks:
The picture on the right illustrates how the flow is organised. For sake of simplicity, the gate control block is mocked using the RGB LED available on the board.
From a system development point of view, following the workflow described earlier, we can identify the following steps:
Lets explore them, one by one.
To be able to define what hardware is needed to implement the system, let's go through our requirements again: the system needs to be able to capture video from the Pcam 5C (input) and make the stream available for processing. For the output, the only must is to be able to drive the RGB LED, although having also a display available via HDMI is a nice to have. For the processing of the image, I'm going to use machine learning algorithms, which can be accelerated in hardware. Xilinx has been very active on the machine learning front, providing many tools and libraries which contain hardware accelerated cores, that can be used "out-of-the-box".
As starting point for hardware implementation, Digilent has made available several reference model for their boards on GitHub. There are a few repositories for the Zybo Z7-10, but none of them offer support for the Pcam 5C. There is a workshop example platform, which targets the Zybo Z7-10 and the Pcam 5C, which can be used as a starting point. Also, to gain more insight on what IPs are needed to create a working video pipeline, and also to extend the system to include the GPIOs (LEDs, switches, etc), it is useful to take a look at how it is implemented for the Zybo Z7-20 (which include Pcam 5C support).
The picture below shows the high level design for the hardware platform (the control signals are not shown).
Lets explain what the blocks do, starting from the video processing. The VIDEO STREAM block implements the MIPI CSI-2 receiver interface, decodes the data and produces a FIFO data stream. The data stream is stored on the board DDR memory thanks to the AXI DMA (Direct-Memory-Access) block.
This is necessary, as the system will not process real time video stream, but only single frames extracted at specific time.
The processor will initiate the face detection stage and orchestrate the data transfer to the FACE DETECTOR custom IP block. Again, DMA is used to transfer data across. Similarly, if the FACE DETECTOR will signal a positive detection, the FACE RECOGNISER will fetch the frame data to process the recognition using DMA. Finally, the GPIO controller (which will also implement a PWM module), controlled by the processor, drives the RGB LED on the board.
All the blocks are available on Vivado as free IPs, except the 2 custom IP that deal with face detection and recognition, which will need to be implemented. For face detection, I have found a nice implementation, which can be used with Vivado HLS to create the IP from C code. The code can be found here.
I have downloaded the code, set up the project, run the simulation and, finally, run the synthesis, below you can see the result.
Well, the output picture, obtained running the simulation, shows that the algorithm works pretty well, but the resource utilisation report is bearer of very bad news! Looking at the various resources, this project overrun the FPGA resources available with the Zynq XC7Z010, so the freshly synthesised IP will not fit into the fabric!! And this IP would only take care of face detection, I would still need room on the FPGA for the face recognition IP, not to mention the space needed to synthesise the hardware platform (which, even with trimming all the IPs and I/O not needed from the Digilent reference implementation, still accounts for about 58% of the available fabric space). I have also looked at other implementations of the face detector (based on Viola-Jones algorithm), but even the most "lightweight" found would still use too many resources. This throws a huge spanner into the workings of this implementation: hardware acceleration is simply not feasible on this Zynq device, as the fabric is too small. This has been a huge oversight on my side, I should have paid more attention to the warnings on the documentation and do a bit more investigation on the matter before starting full steam the implementation. That would have saved me a huge amount of time... well, you live and learn!
Not all is lost: in my planning for the roadtest I did account for this eventuality, and I have a plan B: bypass the hardware acceleration altogether and implement all in software, but this implies that the timing requirement will likely not be met! Although disappointing, I thought it is still a valid exercise to carry on completing the project.
To make things easier, and to try and leverage as many libraries as possible, the next hardware platform must be able to run a Linux distribution. Again, Digilent offer some reference hardware implementation for Petalinux, but the problem is that the one for the Zybo Z7-10 does not include support for the Pcam 5C.
Fortunately, the one for the Zybo Z7-20 does include the Pcam 5C support, and can be adapted to run on the Z7-10. The necessary changes can be found on this post on the Digilent forum (by the way, the forum is a great place to find lots of useful information). One remark: the design will encompass the use of DIV2RGB IP block, which comes with debug enabled by default. This cause the generation of the logic analyzer (ILA) module, which utilise quite some space in the FPGA fabric, therefore, before going on with the synthesis, disable the debug option. A second remark is regarding the MIPI CSI-2 RX receiver IP: this is a "paid for" IP, and in order to use it you need a licence. Fortunately, thanks to Fred27 that kindly donated his SDSoC licence to me, I got it covered. The alternative to using the paid for IP is to grab the platform HDF file generated by Digilent themselves, which is available as attachment in the post referenced above. Another, more complex and time-consuming alternative is to use the Digilent own free IP cores, available on the Digilent Vivado library, which are slightly different, thus requiring a bit of rework on the video pipeline (those IPs are used in the Zybo Z7 video workshop).
The pictures below show the hardware design in Vivado.
{gallery} Vivado HW design |
Vivado Hardware Design |
Hardware diagram |
To complete the hardware platform creation, just go through the usual workflow: Synthesis, Implementation and Bitstream Generation. Once completed, we need to export the hardware (HDF platform file), so can be later used to include the support for the new hardware into our Linux OS, which is the next step.
The next step is to create the OS layer. Such layer will contain the kernel and the drivers to control the hardware components, and will be based on Petalinux.
Petalinux is another Linux distribution, created ad-hoc by Xilinx to support their hardware. It is based on Yocto, the standard build system used to create Linux distribution, which enormously simplifies the creation process.
On the Digilent GitHub there are many Petalinux distributions available. We need to use the one that matches the hardware we just created in Vivado. Once again, this distribution is intended for the Zybo Z7-20, so we need to tweak it to adapt it for the Z7-10 (again, the post on the Digilent forum, referenced before, helps explaining the necessary changes).
Basically, creating a distribution implies creating a kernel image, a boot image, including the device tree and finally creating a root file system. All those parts are configurable, and the Petalinux build allows that by using the familiar package configuration wizard. The whole process is pretty streamlined, and if you don't deviate from the standard build, it is pretty straightforward. At first, if you take a look at the build tree and the configuration files, trying to change some configuration, or add some new application (which, by the way, can be even added from source files, with the cross-platform build system taking care of producing the right executable for the right architecture for you) can be daunting.
But, as always, spending a bit of time playing with it and reading the Xilinx Petalinux guide (I'm not including a link, because each Petalinux version has its own user guide), you can quickly grasp the basics.
Back to the project, I'm only interested in generating the boot image, the device tree and the kernel image, as I am replacing the Petalinux with Debian Buster distribution (which is done by replacing the root file system).The information about the device tree are automatically extracted from the hardware description file created with Vivado when exporting the hardware.
Before launching the build of the Petalinux distribution, another change needed is to switch from in memory to SD card boot. Again, all the information to successfully configure and build Petalinux are available from Digilent, on the Readme file of the GitHub repository, and there is also information on how to prepare the SD card and copy the distribution onto it. The build process will take some time and, depending on how you have configured your build, will us up quite a few GB on your disk.
As said, I am not using the Petalinux root file system, but I am creating a Debian Buster based root file system. This link explain pretty well how to "bootstrap" a root file system for armhf architecture (which is our ARM Cortex-A9) from a host platform. The only changes needed are relative to the Debian distribution used (I am using buster and the respective repositories) and the specific information about the system (like the hostname, partitions, etc...).
Once the basic root file system has been created, and copied onto the SD card, such card can be used to boot the Zybo (make sure you set the jumper JP5 on the board on the correct position). This standard build should allow the use of the the Ethernet and the HDMI output port on the Zybo, which means the board can be connected to a monitor and to the Internet (which is a requirement, in order to be able to configure the system according to the need of the Gateway Access application.
On the right, you can see the picture of the Debian Buster login console on the Zybo.
Once the OS layer has been prepared, we can now focus on the actual application: gate access control using deep learning. I have already introduced the flowchart, illustrating the basic logic of the application. Basically, the core of the functionality is based around machine learning. The algorithms use OpenCV (face detection) and Tensorflow (face recognition) . The video device is controlled using the v4l2 library., while the RGB LED is controlled using UIO driver (I wrote a Python version of Digilent's libuio and libpwm). To speed up the development, I have implemented the solution using Python 2.7. The choices of the versions for the software packages have been mostly forced by the availability on the Buster repository, as I wanted to avoid having to build the packages from source. Unfortunately, some version combination just weren't working, with particular regard for Tensorflow. This has forced me to build it from source. If you don't know Tensorflow, it is a software used to support the kind of calculation (tensor algebra) used by neural networks. It has been developed as an internal tool by Google, and then release to the public later on. Its java based build system, Bazel, it is a very convoluted piece of software, and I had to build this from source too. To speed up the builds, I tried to set up a cross build system, so I could leverage the power of my laptop. Unfortunately, I kept getting errors while building, so I had to resort to native build on the Zynq. While Bazel build went pretty smooth, and lasted only few hours, Tensorflow's took solid 4 days to complete on the Zybo Z7-10 (and I had to repeat the build a few times, to find the right configuration settings for the build!).
The application is pretty simple: it is basically an indefinite loop, where in each loop the a frame is captured from the camera. By default, the gate is in "deny access" state. The frame is processed, looking for a face. If the face is detected, the state change to "face locked", and the face part is extracted from the frame, and passed to the face recognition engine for processing. The recognition engine is actually a classification network, which will try and label the face. If the label matches any of the names in the allowed list, the access is granted, and the RGB LED turns green for 5 seconds, otherwise it turns RED. Both the labels and the allowed persons list files can be found in my Github repository.
The details of the machine learning workflow, used for this application, can be found in the appendix. Below, I include the Python source file, used for the application.
{tabbedtable} Tab Label | Tab Content |
inference_tflite_facecascade.py | import tensorflow as tf import cv2 from keras.models import load_model import numpy as np import json import select import v4l2capture import time from pwm_rgb import PWM_RGB,BLUE,GREEN,RED pwm=PWM_RGB(4,0) pwm.setPeriod(60000) pwm.red() pwm.enable() modelfile='./model_full_face_recognition.h5' allowed = None with open("allowed.json", "r") as read_file: allowed = json.load(read_file) try: import cPickle as pickle except ImportError: # python 3.x import pickle with open('labels.p', 'rb') as fp: label_map = pickle.load(fp) # Load TFLite model and allocate tensors. interpreter = tf.lite.Interpreter(model_path="converted_model.tflite") interpreter.allocate_tensors() # Get input and output tensors. input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() # Open the video device. video = v4l2capture.Video_device("/dev/video0") size_x, size_y = video.set_format(1920, 1080) video.create_buffers(1) video.queue_all_buffers() # Start the device. video.start() time.sleep(10) while True: # Wait for the device to fill the buffer. select.select((video,), (), ()) image_data = video.read_and_queue() frame_mat = np.reshape(np.frombuffer(image_data, dtype=np.uint8),(size_y,size_x,3),order='C') frame_mat=cv2.flip(frame_mat, 0) faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml') gray_mat = cv2.cvtColor(frame_mat, cv2.COLOR_BGR2GRAY) start_time=time.time() faces = faceCascade.detectMultiScale( gray_mat, scaleFactor=1.1, minNeighbors=5, minSize=(50, 50), flags=cv2.CASCADE_SCALE_IMAGE ) print("Detection run time: %s s" % (time.time()-start_time)) if len(faces)==0: print("no faces detected") pwm.red() continue pwm.blue() (x,y,w,h)=faces[0] frame_mat = frame_mat[y:y + h, x:x + w] frame_mat=cv2.resize(frame_mat,(150,150)) frame_mat=np.reshape(frame_mat,[1,150,150,3]) input_data = frame_mat.astype('float32') interpreter.set_tensor(input_details[0]['index'], input_data) try: start_time=time.time() interpreter.invoke() print("Recognition run time: %s s" % (time.time()-start_time)) except: raise Exception("invoke failed!") output_data = interpreter.get_tensor(output_details[0]['index']) id = [key for (key, value) in label_map.items() if value == np.argmax(output_data)][0] if id in allowed.keys(): pwm.green() print("User \033[1;32m%s : ACCESS GRANTED!\033[0;30m" % allowed[id]) else: pwm.red() print("User \033[1;31munrecognized : ACCESS DENIED!\033[0;30m") time.sleep(5) video.close() |
uio.py | import os import mmap class UIO(object): def __init__(self, uioNum,mapNum): if (uioNum < 0) or (mapNum < 0): raise Exception("Invalid UIO device or map number. Check /sys/class/uio for more information about the available UIO devices") self.uioNum=uioNum self.mapNum=mapNum filename = '/sys/class/uio/uio%d/maps/map%d/size' % (uioNum, mapNum) uiofile= '/dev/uio%d' % uioNum if os.path.isfile(filename) == False: raise Exception("UIO device or map number not found. Check /sys/class/uio for more information about the available UIO devices") fileObj = open(filename) self.mapSize = int(fileObj.readline(),0) fileObj.close() try: self.uio_fd = os.open(uiofile, os.O_RDWR) self.mmap = mmap.mmap(self.uio_fd,self.mapSize, mmap.MAP_SHARED,mmap.PROT_READ | mmap.PROT_WRITE, os.sysconf("SC_PAGE_SIZE")*self.mapNum) except: raise Exception("UIO device not found in /dev/uio*") def release(self): self.mmap.close() os.close(self.uio_fd) |
pwm_rgb.py | import os from uio import UIO import struct PWM_CTRL_OFFSET = 0 PWM_PERIOD_OFFSET = 0x8 PWM_DUTY_OFFSET = 0x40 DEFAULT_PERIOD=60000 DEFAULT_DUTYCYCLE=30000 BLUE=0 GREEN=1 RED=2 class PWM_RGB(UIO): def __init__(self,uioNum,mapNum): super(PWM_RGB,self).__init__(uioNum,mapNum) def enable(self): self.mmap[PWM_CTRL_OFFSET:PWM_CTRL_OFFSET+1]=struct.pack('<B',1) def disable(self): self.mmap[PWM_CTRL_OFFSET:PWM_CTRL_OFFSET+1]=struct.pack('<B',0) def setDutyCycle(self,colour,duty): self.mmap[PWM_DUTY_OFFSET+4*colour:PWM_DUTY_OFFSET+4*(colour+1)]=struct.pack('<L',duty) def setPeriod(self,period): self.mmap[PWM_PERIOD_OFFSET:PWM_PERIOD_OFFSET+4]=struct.pack('<L',period) def getDutyCycle(self,colour): return struct.unpack('<L',self.mmap[PWM_DUTY_OFFSET+4*colour:PWM_DUTY_OFFSET+4*(colour+1)]) def getPeriod(self,colour): return struct.unpack('<L',self.mmap[PWM_PERIOD_OFFSET:PWM_PERIOD_OFFSET+4]) def close(self): self.release() def red(self): self.setDutyCycle(RED,DEFAULT_DUTYCYCLE) self.setDutyCycle(GREEN,0) self.setDutyCycle(BLUE,0) def green(self): self.setDutyCycle(GREEN,DEFAULT_DUTYCYCLE) self.setDutyCycle(RED,0) self.setDutyCycle(BLUE,0) def blue(self): self.setDutyCycle(BLUE,DEFAULT_DUTYCYCLE) self.setDutyCycle(GREEN,0) self.setDutyCycle(RED,0) |
The video below shows a demo of the face recognition controlled access gate. To test the application, the setup is pretty simple. To make it easier for the demonstration, the camera will detect photos shown on the computer monitor.Side by side with the photos there is a terminal connected to the Zybo, to show the logs on the application.
I am presenting the camera 3 different photos: two are positive match (me and Franco, allowed access) and one is a negative match (Enrico Fermi, not present in the list, access denied)
As can be seen on the video, both the face detection and the face recognition take quite some time (on average face detection takes about 1 second, and face recognition close to 30 seconds). Unfortunately this is due to lack of hardware acceleration, as the 2 ARM cores only run at 667MHz!
Although very disappointed with the time response, I'm quite please with the accuracy of the system, which is well over 90%. In the video, all three samples are correctly classified.
Working with AI requires its own development workflow, often run in parallel with the system development one. To make this task easier, I used Python here too, as it allows me to use the Keras framework, which makes working with deep learning and neural network a lot easier (and also you can find a lot of pre-trained networks created with Keras)
For my project, there are 2 different machine learning algorithms being used, each with a specific task: face detection and face recognition. The face detection is based on the famous Viola-Jones algorithm (if interested, this paper gives a good description), and I use the OpenCV Haar-cascade implementation for recognising frontal faces. This is implemented as a Support-Vector-Machine (SVM) classifier algorithm, which uses Haar-like feature for object detection. The features are usually stored in a file, and they have been obtained by training the SVM. So, once you get the file, there is no need to do the training.
For the face recognition, a deep convolutional network is used. The model for the network I used is the VGG-Face (described here). Here is the architecture of this neural network:
Layer (type) Output Shape Param #
input_1 (InputLayer) (None, 150, 150, 3) 0
conv1_1 (Conv2D) (None, 150, 150, 64) 1792
conv1_2 (Conv2D) (None, 150, 150, 64) 36928
pool1 (MaxPooling2D) (None, 75, 75, 64) 0
conv2_1 (Conv2D) (None, 75, 75, 128) 73856
conv2_2 (Conv2D) (None, 75, 75, 128) 147584
pool2 (MaxPooling2D) (None, 37, 37, 128) 0
conv3_1 (Conv2D) (None, 37, 37, 256) 295168
conv3_2 (Conv2D) (None, 37, 37, 256) 590080
conv3_3 (Conv2D) (None, 37, 37, 256) 590080
pool3 (MaxPooling2D) (None, 18, 18, 256) 0
conv4_1 (Conv2D) (None, 18, 18, 512) 1180160
conv4_2 (Conv2D) (None, 18, 18, 512) 2359808
conv4_3 (Conv2D) (None, 18, 18, 512) 2359808
pool4 (MaxPooling2D) (None, 9, 9, 512) 0
conv5_1 (Conv2D) (None, 9, 9, 512) 2359808
conv5_2 (Conv2D) (None, 9, 9, 512) 2359808
conv5_3 (Conv2D) (None, 9, 9, 512) 2359808
pool5 (MaxPooling2D) (None, 4, 4, 512) 0
Total params: 14,714,688
Trainable params: 14,714,688
Non-trainable params: 0
The important thing to notice here is the number of trainable parameters (weights) of the network, which for this one sum up to nearly 15 million. With such high number of parameters, to obtain good accuracy for the prediction, the network need to be trained with feeding it thousands of images, which would probably take days (on powerful GPUs - on normal CPU would probably take weeks!!).
To speed up everything, instead of starting from a fresh network, we can use one that has been already trained (it is not really important what it has been trained for), and use the concept of transfer learning. In my case, I took the VGG-Face network shown above, loaded using some pre-trained weights, then added couple of layers at the end to transform it into a classifier network, then trained only the weights belonging to the new layers. Below I show the layers added, and how the number of weights changed:
pool5 (MaxPooling2D) (None, 4, 4, 512) 0
flatten (Flatten) (None, 8192) 0
classifier (Dense) (None, 606) 4964958
Total params: 19,679,646
Trainable params: 4,964,958
Non-trainable params: 14,714,688
Now, I only need to train nearly 5 millions of weights, and the dataset I'm going to use doesn't need to be huge to guarantee good accuracy. For the training, I have chosen the Unconstrained Facial Images (UFI) database, more precisely the cropped images set, which contains 605 different faces (with an average of 7.1 images per face), and added my own face to it (to make it 606). The data set has been split between training and validation (80/20 split), and has been fed to the network. The training took about 27 hours, with excellent results for accuracy and loss (shown below).
Last thing left to do was to convert the trained model to the Tensorflow tflite format. This format is particularly optimised to run on mobile devices, and in general for less powerful devices. I have done this to try an improve the performance of the recognition.on the ARM cores.
I will start with the positives, by saying that working with the Zybo Z7-10 has been very interesting and rewarding. The board has got all that is needed to exercise most, if not all, of the Zynq features. There are plenty of inputs and outputs, enough RAM on the board, including the audio and video connectors. Moreover, the PCam 5C is a great addition to the kit. Expandability of the system is warranted by the 5 Pmod connectors.
In general, the board is also well supported by Digilent, which provides many resources, and its forum as well is active and contains many useful information. Same can be said for the support from Xilinx for the Zynq device. This makes this board ideal for start learning about the Zynq architecture, but this doesn't mean this is merely a starters kit. Quite the contrary, the board lends itself to more demanding applications, particularly for audio processing. As for the video, the board is equipped with all the necessary connectors, but can only be used for basic video processing. Creating real-time hardware video filters (just like in the workshop demo) is possible, but if more complex processing is needed, there is just not enough resources available on the Zynq XC7Z010.
Unfortunately, I have experienced this limitation first hand. During the development of my project, I have experienced some very frustrating moments, most of which caused by the specificity of my needs: as I said, in general Digilent and Xilinx offer good support and resources, like reference implementation, which are helpful. The problems start when you need/want to deviate from that reference implementation, either because you need/want to use different version of the toolset or if you need to use components and software which are new to the platform.
For instance, I started my roadtest experience using the latest version of the tools (2019.1), as I usually do when testing new platforms. Sadly, after spending many many hours trying to fit a round peg in a square hole, at the end I had to surrender and install the version used for the reference implementation I based my project on (i.e. 2017.4) side by side with the other.
Despite the fact I didn't manage to implement hardware acceleration for my project, which was my main motivator for trying this board, I still believe, with more time available, some form of acceleration (at lower level) would have been possible.
One last comment regarding the development toolset, which plays a primary role for the use of any development board. As I had chance to say when I reviewd the Digilent Arty S7, Xilinx has created some very powerful tools. At the time, I only used Vivado and the Xilinx SDK, and was pleasantly surprised to notice how, despite the complexity of the task they accomplish, those tools were relatively intuitive to use, even for amateurs developers (once you get used to the workflow). This time I also had the opportunity to use Vivado HLS, SDSoC. Petalinux doesn't really need any comment, as it is basically a different flavour of Yocto, which is a great tool, so the same apply to the Xilinx take too. Vivado HLS and, more so, SDSoC are a revelation! I found HLS to be brilliant, although it takes time to be able to produce optimised IP implementation, as it allow the use of many directive in the code, whose use it not always easy to grasp.
I have tried SDSoC at the very beginning of my project (I was hoping to implement my solution using SDSoC and the libraries available with it), and I was very impressed with it. Personally, I think this particular tool represents the future of SoC design on FPGA on large scale: as the size and the complexity of the FPGA grows, so does the complexity of the systems designed, making it impractical and uneconomical to design them at RTL level. This reminds me of what happened in the software world with the introduction of compilers technology: when the first compilers were created, developers didn't trust them to do a good job generating the machine code, believing they would never replace the handcrafted machine code. Fast forward 60 years and today no programmer would dream of writing a program at that level, knowing that the compiler technology has matured so much that now can perform better optimisation than a manual one.I believe the SDSoC tool is the "compiler" for FPGA and will likely follow the same destiny.
It goes without saying that, to master any of the above tools at professional level, there is a whole lot more to learn!!
All in all, my impression on this board is a very positive one. I liked working with it and I think it makes a great board for gaining experience on more advanced use of the Zynq architecture.
I will close by thanking rscasny, element14 and Digilent for giving me this great opportunity.
I feel you did a great review of the product in spite of the difficulties. Thanks gecoz
A great road test that looks at some interesting features of the Zynq. It's a shame that the hardware was too small to run the face recognition in hardware. It would be interesting to see how much faster…
Thanks David,
Indeed, I wish we had the Z7-20 for the roadtest now... but still the Z7-10 is an excellent board, fun to work with. I haven't tried implementing the face recognition system using SDSoC yet…
Hi Emmi,
I used Debian because I was hoping I would have found more packages compatible with ARM, ready to be used on the Zybo, as the Debian repositories usually have more packages available for installation. Petalinux had only a limited set. Anyway, I cannot see any problem in using Petalinux for your build, as the build tool chain is available, and that is all you need really.
As for the the high level synthesis, it is disappointing that, even with the Zybo 20, still there is not enough LUT to implement it. But with the 20, you can try going a different route, using the Xilinx Deep Learning Processor Unit, which I beliieve should fit onto the Zynq 7020.
If you do implement it yourself in HDL, please do post a blog here on E14, I would be very interested in reading it.
Thank you for your reply. I understood.
Can I ask you additionally?
I don't know much about Linux, so I'm sorry if my question is incoherent.
Why did you change to Debian Buster's root filesystem instead of petalinux?
Is it impossible to build python, bazel, tensorflow with a boot image created by petalinux?
I've been trying to do the same test by z7-20. And the high-level synthesis result of the face detection part looks like this.
After all, LUT capacity is exceeded. So I have to design with verilog HDL by myself (>_<) or give up hardware acceleration.
Hi Emmi,
Thank you for you comments.
Yes, I remember the problems, as I was hoping to use my (powerful) laptop to do a cross-build, and cut the time needed, but all the executables built that way were causing awful segmentation faults.The only executables that woirked were the compiler and build tools. For the native build I used gcc. (had to rebuild the gcc from source, to have a native version of the toolchain). Once built the native gcc compiler and build tools, I built all the libraries needed from source. In my case, I had to build both python and Bazel from scratch on Zybo, using the native gcc compiler. It is not a quick build mind. If I remember rightly, the build of everything (python, Bazel and tensorflow) took a few days! I hope this helps.
Thank you for posting a great road test.
It's been over a year since you posted this review, let me ask you a question.
I read that you were planning to cross-compile your python programs using BAZEL, but were blocked by some errors and did a native compilation on Zybo.
Could you please tell me what compiler you used to compile python on zybo?
Thank you,
I have now fixed the mistake.
Indeed, VGG is huge, but I have tried also Inception V3 and ResNet50, and using the same dataset, I got the best accuracy with VGG-Face. In particular, using the others I had experienced noticeably more False Negatives when running with known faces.
Thanks David,
Indeed, I wish we had the Z7-20 for the roadtest now... but still the Z7-10 is an excellent board, fun to work with. I haven't tried implementing the face recognition system using SDSoC yet, which I believe could have given some hints on the amount of acceleration achievable using FPGA, but I read a few papers, where the figure around 10 - 12x acceleration is kind of recurring.
A great road test that looks at some interesting features of the Zynq. It's a shame that the hardware was too small to run the face recognition in hardware. It would be interesting to see how much faster it would be.
You're very welcome on the SDSoC liscence front. I can see you made good use of it even though the end result didn't pan out this time.


text:
November 23, 2016 •
North Carolina Governor's Race Drags On
Yesterday, Gov. Pat McCrory formally requested a recount in his race for governor against Democratic Attorney General Roy Cooper.
Cooper has already declared victory, but with the race within 10,000 votes, McCrory is not conceding and there is no answer to when the race will officially end. This week, the head of the conservative group Civitas Institute filed a federal lawsuit to block the counting of votes cast using same-day registration on Election Day. McCrory has also filed challenges in many counties alleging voter fraud, claiming ballots were cast by dead people and felons.
State and Federal Communications, Inc. provides research and consulting services for government relations professionals on lobbying laws, procurement lobbying laws, political contribution laws in the United States and Canada. Learn more by visiting stateandfed.com.

subset: commoncrawl


text:
Other ideas that have been tried Cost and tradition are the vital marketing ingredients. Production is usually producer-driven not consumer. People produce what they have been taught to produce and don't often look for innovations. They have to be convinced that the improvement suggested will work and won't cost them too much.
The Kisumu Innovation Centre manager, Martin Osumba, talks almost wearily about the efforts they have made to change people's thinking. There is an experimental bicycle rickshaw at his workshops. Although these have been successful elsewhere in the world, it has not caught on in Kenya.
They have also tried using panniers at the sides of the back wheel to carry baggage but again this has not been an accepted innovation.


text:
If you are considering walking this route yourself, please see my disclaimer. You may also like to see these notes about the maps and GPX files.
Google map of the walk Download GPX file of the walk
I did this roughly 14.8 mile circular walk on Sunday, 30th December 2012. This was a new route for me, although most of it was on familiar paths with only three short sections that I'd not described on this web site before (two of these were entirely new, the first such section around Tring reservoirsMarsworth, Tring Station, Haltonthink I may have walked long beforeMarsworth, Tring Station, Haltonstarted this web site). Because of all the rain we've had over the last 10 days or so,Marsworth, Tring Station, Haltonchose to do a triangular walk where two sides were besides reservoirs or canals (where the paths were at least partially surfaced and therefore less muddy than elsewhere).
I parked in a side street in Marsworth and started walking about 9.40am.Marsworth, Tring Station, Haltonfollowed the main road through the village and crossed the Grand Union Canal on the footbridge next to the road bridge.Marsworth, Tring Station, Haltonwas disappointed to see that the White Lion pub next to the canal was obviously closed, with all the windows boarded up - it's so sad that so many country pubs are closing nowadays. Still, at least the Angler's Rest (about a hundred yards further up the road) looked as if it was still in business.Marsworth, Tring Station, Haltoncrossed over the road and walked into the Pay and Display car park for the Tring Reservoirs, turning right and going up an embankment to reach Startop's End Reservoir.Marsworth, Tring Station, Halton followed the edge of the reservoir southwest, parallel to the road, then continued along the embankment as it turned left.Marsworth, Tring Station, Haltonsaw some Tufted Ducks, Coots and Canada Geese on the reservoir, and a man thatMarsworth, Tring Station, Haltonpassed had some binoculars and was clearly out bird watching (the reservoirs are a local hot spot for this activity). In the next corner of the reservoir the path ended at a minor road.Marsworth, Tring Station, Haltoncrossed over, and continued beside the northern end of Tringford Reservoir. When the path round this reservoir turned left,Marsworth, Tring Station, Haltontook a branching path going straight on along the edge of an empty paddock to reach a lane. A short distance to the leftMarsworth, Tring Station, Haltoncame to a T-junction whereMarsworth, Tring Station, Haltonturned left. After two or three hundred yardsMarsworth, Tring Station, Haltontook a familiar path on the right, which soon joined the tow path along the dry middle section of the Wendover Arm of the Grand Union Canal (see here for a description of a walk along the length of this branch of the canal, whichMarsworth, Tring Station, Haltondid in June 2009).
Startop's End Reservoir
Tringford Reservoir
The lane, near Tringford
In fact, after all the recent rain the 'dry' section wasn't that dry, with huge puddles filling a considerable distance of the canal.Marsworth, Tring Station, Haltonfollowed the tow path, with the canal on my left. SoonMarsworth, Tring Station, Haltonwas passing close to Wilstone Reservoir (the largest of the four Tring Reservoirs) over to my right. A lady held her dog by its collar as we met, and she explained that the dog was friendly but apparently had a thing about people carry maps!Marsworth, Tring Station, Halton passed a wooden bridge carrying a footpath over the canal, and a little further onMarsworth, Tring Station, Haltonwas pleased to come across a section of the canal that was being restored. I then came to a section that was restored recently (it was being restored when I did that walk in 2009) - the vegetation has already fully recovered and if I'd not known there was nothing to indicate that the canal hadn't always looked this way. AsMarsworth, Tring Station, Haltonpassed under the bridge at Drayton Beauchamp,Marsworth, Tring Station, Haltontook my camera out of it's case to take a photo - asMarsworth, Tring Station, Haltondid so,Marsworth, Tring Station, Haltonunwittingly put my left foot in a pothole in the surfaced path here and went over on my left ankle.Marsworth, Tring Station, Haltonjust managed to stop myself from tumbling into the canal, and fortunately there was no damage done to my ankle.
The 'dry' section of the Wendover Arm of the Grand Union Canal
The 'dry' section of the Wendover Arm of the Grand Union Canal
A section of the canal currently being restored
This next section was restored recently
The Wendover Arm of the Grand Union Canal, from under the bridge at Drayton Beauchamp
I soon passed close to Drayton Beauchamp church, up above the embankment on my right. A little further onMarsworth, Tring Station, Haltonpassed under the modern bridge carrying the A41 dual carriageway. Shortly after, the towpath went right for a few yards before turning left to resume its generally south-westward direction and soon reaching Bucklandwharf. HereMarsworth, Tring Station, Haltonhad to cross the old A41 heading into Aston Clinton, and on the other side of the road the towpath resumed on the opposite side of the canal.Marsworth, Tring Station, Haltonnow had fields sloping up on my left to the road to Halton and Wendover thatMarsworth, Tring Station, Haltonuse on so many of my walks in the Chilterns. This section ended at Wellonhead bridge, beyond which there were tall trees either side of the canal.
Just past the A41 bridge over the canal
The Wendover Arm approaching Bucklandwharf
The canal approaching the former A31 at Bucklandwharf
Approaching Wellonhead Bridge, south of Aston Clinton and Buckland
So far I'd only met a few people coming the other way, but now there were a couple walking just ahead of me. WhenMarsworth, Tring Station, Haltoncaught up with them they kindly stepped aside to let me pass.Marsworth, Tring Station, Haltonpassed Harelane Bridge, and soonMarsworth, Tring Station, Haltonwas passing the extensive playing fields of RAF Halton on my left.Marsworth, Tring Station, Haltonthen passed under an impressive blue bridge and a little further onMarsworth, Tring Station, Haltonleft the canal at a road bridge in the village of Halton.
The canal just beyond Wellonhead Bridge
The canal continuing towards Halton
The canal continuing towards Halton
The canal passing the playing field of RAF Halton
Approaching Halton (the road bridge where I left the canal is visible below the blue bridge)


text:
I make weather forecasts every day. My forecasts only go out a week or so, but the first few days are the most important and the ones people remember. I don't make long range forecasts.
When I'm wrong, especially on critical days, people remember. When you make long lead forecasts people tend not to remember as much.
Did AccuWeather's release affect anyone? It came out 3/20. On 4/2 USA Today printed this AP article:
4 thoughts on "Do Predictors Forget?"
The forecasters may have "forgot" about their predictions, but I certainly haven't. I was already irate about this in April when Bastardi first started the fear mongering. Here was my blog entry on abc6.com
Well it looks like Joe got his doom and gloom Winter forecast in the front page of the Register.
Accuweather or Accuguess is notorious for their (as the above poster put it) doom and gloom forecast. They are, in my opinion, no better then the media as severe alarmists. But yet we are still drawn to them, and we are all guilty of reading their forecasts.
Yes, Geoff, i remember that exact statement and before i could finish reading it i was angered, as a student meteorologists and for everyone else reading it. And i know other OCMs in Connecticut couldn't agree with you more.
This is an especially difficult subject for TV weather people. On one hand, we're jealous of the incredible publicity AccuWeather gets for these predictions (Joe Bastardi has become reasonably well known on a national level). On the other hand, we'd never make them, because we know they'll often be wrong.
Among the more amazing features of the Internet is, there's a record of many things that used to disappear. Our collective memory will get better becvause original releases, like Bastardi's hurricane predictions for this season, are still online.
Maybe that will cut down on long range forecasts.


text:
As the world prepares for the COP26 UN Climate Change Conference in Glasgow in November, KPMG has published its first Net Zero Readiness Index (NZRI). The NZRI is a tool that compares the progress of 32 countries in reducing the greenhouse gas emissions that cause climate change, and assesses their preparedness and ability to achieve Net Zero emissions of these gases by 2050.
Net Zero primarily means reducing greenhouse gas emissions caused by humans as close as possible to zero, with remaining emissions balanced by an equivalent amount of carbon removal from the atmosphere. While the main greenhouse gas is carbon dioxide, which makes work towards Net Zero carbon the central task, the Index also includes emissions of methane and nitrous oxide.
China is the world's largest emitter of greenhouse gases with a reliance on coal for energy, however, it is rapidly developing renewable generation. The government has set a 2060 Net Zero emissions target and launched a carbon emissions trading scheme.
Connect with us
- Find office locations kpmg.findOfficeLocations
- kpmg.emailUs
- Social media @ KPMG kpmg.socialMedia


text:
When it comes to online dating sites, when to be exclusive is an important concern. When it comes to simply being special with a partner, you need to be sure to always be very clear as to what you prefer from the relationship. Using obscure terms is usually not good for your heart and soul and mind. Furthermore, you should not be afraid of claiming no . Every time a person diminishes your submission, ask them as to why and business address the larger problems.
The idea behind becoming exclusive is always to put all of energy in to this marriage, which means simply no distractions. This also means working toward a future jointly. The relationship must be fun and friendly. There shouldn't be any excitement between you two. If the two of you are at ease with each other and revel in each other peoples enterprise, then you should be exclusive.
Generally, you must wait much more than two months prior to asking anyone to be special. However , that isn't always possible. Experts advise waiting in least three months. This will give you both equally time to make decisions and just isn't going to seem raced. Alternatively, wait no more than a time. If you wait a long time, you may not have the time to really be renowned.
Upon having https://youcookcuisine.com/internet-dating-tips-for-men/ attained someone and get dating for a while, you may feel willing to tell them that you just love them. Yet , be careful not to tell your friends a lot, since you don't really want them asking about you after if the relationship https://cupidbrides.com/korean-brides/ will fall apart.


text:
Irtah (Sha'ar Efrayim), Wed 29.7.09, Morning
Translator: Charles K.
4:20 As usual, a line whose end isn't visible stretches between the fences, some people sitting and some standing.
4:32 An announcement over the loudspeaker, "Good morning," in Hebrew. The gates open for a few seconds. Men and women, intermingled, run and stand ready to go through the electronic gate one at a time. Some place their bags or packages on the shelf at the side in order to go through, some remove shoes (apparently they already know that the shoes will make the alarm go off). As they go through, people continually are called to in Hebrew – "Come here," "What have you there?", "What's in your purse?", "Leave the bag," "Move back," etc. We can't see from where we're standing who's talking, and we don't know whether the Palestinians can see him and how they know who he's referring to. In any case, they go through efficiently, obediently and quietly. The main thing is not to delay and miss their rides.
The turnstiles open for a few seconds and then close. Sometimes they open for as "long" as twenty seconds, and then the area between the turnstiles and the electronic gate fills up.
4:48 The line thins out and people who arrive go through almost without stopping.
We went over to the exit gate.
The Palestinians complain that the fans aren't working. It's very hot today, even at this hour, the coolest of the day. The air is hot and heavy.
We went over to complain to the only security guard visible at the workers' entrance. He stands with drawn weapon, doesn't look at us, as if we were invisible. Completely opaque. After we try a few times he answers only "the fans are working." We repeat our complaint. His hand moves to his pocket, as if intending to contact someone but we don't know whether he's able to do so and don't hear him speak to anyone. And once again, "The fans are working."
We returned to the Palestinians who are still complaining that the fans in the waiting area for scanning packages aren't working. We returned to the guard and found an additional worker there, drinking coffee outside, and he, at least, talks to us. He says that he himself turned the fans on, and they're working. When it was that he turned on the fans isn't clear from what he tell us.
5:35 The Palestinians confirm that the fans are working.
A man approaches us. He has a sick daughter, unconscious, in the hospital. He has a referral to an examination at Schneider on August 5, but she has to be transported in an ambulance and he doesn't know how to arrange it.
We gave him Mikki's phone number. Hopefully someone can help him.
5:51 The exit turnstiles closed. They reopened four minutes later. We don't know what happened, but in the meantime 80-90 people gathered, waiting to go through.
6:15 We left.


text:
"During the current economic crisis in Greece representatives of the business community are very eagerly looking toward working with their partners abroad and in this sense the Eurasian Union is one of the most advantageous regions to work with," Kouvelis, who is also a former Greek deputy foreign minister, said.
He explained that the EEU would become a very important economic player in the years to come, because of the more than 280 million people it brings together and its geographical location.
"Greece is in a very advantageous geographical position to work with the countries of the Eurasian Union," Kouvelis added.
Kouvelis said that Greek entrepreneurs are particularly interested in "food and food processing, energy, and renewable and new forms of energy as well, hotel and hotel management and tourism, transport, logistics, pharmaceuticals, as well as air transport and construction".
The Eurasian Economic Union, which comprises Armenia, Belarus, Kazakhstan, Kyrgyzstan and Russia, is an international organization, which aims to achieve the free flow of goods and services between its member nations.
EU to Review Anti-Russia Sanctions Policy, Focus on Cooperation
The European Union will review its sanctions policy toward Russia soon, and focus on cooperation instead, former Greek Deputy Foreign Minister Spyros Kouvelis told Sputnik.
"The EU will gradually start reviewing its position towards the sanctions… I believe it is not a thing that will last for a very long time," Kouvelis said.
"The time of the crisis would necessitate the opposite, i.e. the development of collaboration," he added.
According to Kouvelis, the sanctions regime "hampers the economy of not only the Russian Federation, but also the European Union" as it "does not serve the building of bridges between two very important potential partners, like the European Union and the Russian Federation".
Greeсe's Election Result Not to Affect Ties With Russia
The shift towards Russia and the Eurasian Economic Union (EEU) that Greece has adopted in recent months will remain unaffected by any change in government, Kouvelis told Sputnik.
Former Greek Prime Minister Alexis Tsipras announced his resignation earlier this month to pave the way for early elections in a bid to secure popular support for his stance on the new 86-billion-euro ($96 billion at the current exchange rate) bailout package with the country's creditors. The vote is due to take place on September 20.
"Like it or not, I believe the Greek government, whatever it is, will continue to support the Greek business sector in developing its further collaboration with the Russian Federation and the Eurasian Union," Kouvelis said.
He added that the Greek business community would still be "looking very strongly for opportunities" to work with Eurasian Economic Union member-states.
"The actual fact remains: Greece is understandably highly interested in working with the Eurasian Union."
In particular, during the 2015 St. Petersburg International Economic Forum (SPIEF,) then-Greek Energy Minister Panagiotis Lafazanis and his Russian counterpart Alexander Novak signed a memorandum on the construction of the extension of the Turkish Stream gas pipeline through Greece.
Greece Faces Prolonged Period of Non-Development After Bailout
Greece faces a prolonged period of low economic development due to the bailout programs signed with its international creditors, Kouvelis told Sputnik.
On August 14, the Eurogroup approved the third bailout package for Athens in exchange for more austerity reforms that include tax increases and pension cuts.
"Because of the two previous agreements [with the international creditors] and the one that was signed by this government recently, Greece will face a quite prolonged period of non-development. We will have quite a prolonged period of low outcome of the Greek economy."
"That could also be a source of remittances for the Greek economy," Kouvelis concluded.
Greece is currently experiencing a deep economic crisis, struggling to repay its multi-billion debt to international creditors, including the European Central Bank, the International Monetary Fund and some eurozone countries.


text:
You may also like
Recently viewed
Wow! Beautiful
This was the easiest online purchase and delivery and a pleasant surprise and experience! Totally fell in love with my new husbands ring!
Men's wood tungsten ring
I love everything about this ring! It is not too thick and bulky. The wood and tungsten is the perfect contrast. I was nervous to have it couriered all the way to Cape Town, but the process was smooth from start to finish, all for only R99. I would highly recommend this ring and this company.
Men's Striped Vietnam Wood Tungsten Ring - R213
Absolutely stunning service from the day I placed my order online until delivery. I could not believe how quick the order was handled & delivered to me and this during the December Holidays ! Thank you WOODISH for an ABSOLUTE fantastic service. I will definitely make use of you again and refer my friends and family to you ! Regards Magda Nortje
Great product & Amazing Service
This is my second ring that I bought. I also bought a watch. The service is the best. The products are great quality.


text:
Used 2020 Northern Lite Sportsman Edition 9-6 Wet Bath
4-SEASONS, POWER JACKS, HEATED BASEMENT STORAGE FOR LONG BED!Northern Lite Sportsman Edition 9-6 Wet Bath truck camper highlights:
- Front Queen Bed
- Thermal Windows
- Rear Closet
- Rear Corner Bathroom
Gas up your long bed pick up truck and head out on an adventure of a lifetime with this 9-6 Wet Bath truck camper! You will enjoy a great night's rest on the front queen-sized bed and with all of the storage areas surrounding it, including a closet, you can bring along any outfit you desire, plus there is even a heated basement storage. The face to face dinette not only provides a comfortable place for you to enjoy your meals at, but also transforms into an extra sleeping space or if you desire a different layout then you can choose to switch it out for the optional U-shaped dinette. The rear corner wet bath has everything you need to get ready each morning, as well as a Dometic thermal skylight!
These lightweight Sportsman Edition truck campers by Northern Lite are built with a clam shell two piece fiberglass design to prevent a top heavy camper. Each one fits a 3/4 ton and larger short box pick up truck, and can be used during all 4-seasons for your enjoyment. There is high quality craftsmanship not only on the exterior, but also the interior with features like the solid plywood cabinets made with solid hardwoods and paneling, and the nine ply Russian Birch for all of the drawers with full extension roller bearing guides. The two USB charging stations, the heated basement storage area, and the four season package are just a few more of the comfort features you will find and love in any one of these Northern Lite Sportsman Edition truck campers!
Discount: $12,000
Our Price: $35,990
Stock# X1320R
Exterior Color: MULTI
Sleeps | 3 |
Length | 16 ft 6 in |
Ext Width | 8 ft 2 in |
Ext Height | 7 ft 10 in |
Int Height | 6 ft 4 in |
Exterior Color | MULTI |
Dry Weight | 2380 lbs |
Fresh Water Capacity | 33 gals |
Grey Water Capacity | 24 gals |
Black Water Capacity | 13 gals |
Furnace BTU | 18000 btu |
Available Beds | Queen |
Cooktop Burners | 3 |
Floor Length | 9 ft 2 in |
Center of Gravity Front | 42.5 in |
LP Tank Capacity | 20 lbs |
Water Heater Capacity | 6 gal |
Water Heater Type | DSI |
Truck Bed Size | Long |
Number of LP Tanks | 2 |
Body Style | Hard-Side |
Shower Type | Wet/Bath Shower |
Electrical Service | 30 amp |
Over 30-Years of History
In 1989, a group of experienced RV builders, working for a major fiberglass truck camper manufacturer saw a niche in the RV market and established Northern Lite Mfg. to design and build a fiberglass truck camper to fit import trucks.
The company evolved and eventually began to produce a complete line of full-sized truck campers.
In 1989, two entrepreneurs, Mac Donkin and Lloyd Gartrell, who had sold their successful businesses and decided to retire, each purchased with their wives, a Northern Lite Camper for a once in a lifetime tour across Canada and the US and after that a tour to Alaska. After spending 7 months on the road traveling, these gentlemen were so impressed with the quality and workmanship of their Northern Lite Campers that they decided that when they returned home they would invest in this growing company. They felt that if they and their wives were so pleased with these campers, then other buyers would be impressed also.
After 4 years of being investors, Mac and Lloyd decided to buy the rest of the Company. Putting their business experience to work, and emphasizing the importance of building a quality product, Mac and Lloyd expanded the Company until today Northern Lite is now one of the leading manufacturers and exporters of molded fiberglass truck campers in North America.
Bobby Combs RV Center is not responsible for any misprints, typos, or errors found in our website pages. Any price listed excludes sales tax, registration tags, and delivery fees. Manufacturer pictures, specifications, and features may be used in place of actual what's on our lot. Please contact us at Yuma, AZ 928-237-4447, Mesa, AZ 480-696-4417, Coeur D'Alene, ID 208-966-4137, Caldwell, ID 208-402-6426, Hayden, ID 208-772-7634, or Coburg, OR 541-343-1633 for availability as our inventory changes rapidly. All calculated payments are an estimate only and do not constitute a commitment that financing, or a specific interest rate or term is available. *With approved credit. 10% down with a 790+ beacon score.
Under $20000 is based on 144 months and $20000 and up is based on 240 months.
Manufacturer and/or stock photographs may be used and may not be representative of the particular unit being viewed. Where an image has a stock image indicator, please confirm specific unit details with your dealer representative.


text:
Who We Are
Autism Society of Ohio is a coalition of the Autism Society of America affiliates in Ohio: Central Ohio, Greater Akron, Dayton, Greater Cleveland, Mahoning Valley and Northwest Ohio.
Autism Society of Ohio (ASO) is an affiliate of the Autism Society of America, the nation's oldest grass roots Autism organization.
ASO is commited to expanding Autism awareness and programming throughout the state of Ohio, including counties not served by a local afflilate.
Autism Society of Ohio is a source for information on policy and legislation - providing the infrastructure for the Autism Society affiliates and all affected by Autism throughout Ohio to better understand the issues, increase Autism awareness, influence policy and mobilize advocacy efforts.
Our Mission
We create connections, empowering everyone in the Autism community with the resources needed to live fully.
Our Vision
Creating a world where everyone in the Autism community is connected to the support they need, when they need it.
Autism Society of Ohio
P.O. Box 545
Worthington, Ohio 43085
Contact Your Local Affiliate
Autism Society Central Ohio
P.O. Box 272
Worthington, OH 43085
(614) 284-6323
Autism Society of Dayton
4801 Springfield Street
Dayton, OH 45431
(937) 815-4986
Autism Society of Greater Akron
580 Grant Street
Akron, OH 44311
(330) 940-1441
Autism Society of Greater Cleveland
P.O. Box 41066
Brecksville, OH 44141
(216) 556-4937
Autism Society of Mahoning Valley
PO Box 151
Canfield, OH 44446
(330) 333-9609
Autism Society of Northwest Ohio
7140 Port Sylvania
Toledo, OH 43617
(419) 578-2766
The Autism Society of Ohio follows and promotes the Mission and Vision, Guiding Principles and Policies of the Autism Society.


text:
- 868
- New Community Leaders, 368 more than the goal
- $3,000
- In new donations in one week
- 199
- Nonmajor cities represented
Millennials from all around Australia flocked to Oaktree throughout its first decade of existence, driven by its mission to end extreme poverty. In 2013 alone, more than 150,000 people took part in one of Oaktree's campaigns.
To celebrate its 10-year anniversary in 2013, Oaktree built a new website on NationBuilder and set long-term goals. But in the process of the reevaluation, the group uncovered a major flaw in its approach: many people were only participating once, restraining the effectiveness of campaigns and forcing leaders to start almost from scratch each year.
So in 2014, things went a little differently with the End Poverty Roadtrip, a signature grassroots campaign in which young people travel throughout Australia to raise awareness about extreme poverty. Oaktree added new leaders on the ground and followed up more with supporters after. At the end of the six-week campaign, the petition had about 10,000 signatures and every member nation at the G20 Summit in Brisbane committed to its goal: tackling tax justice as a step toward ending extreme poverty.
"Previously what would happen is you'd have the Roadtrip and people would meet with the politicians and then that would be the end of it and the end of their experience with Oaktree," says Chris Wallace, chief executive officer. "But what was new about last year was that we actually had a sustained model of engagement. That was quite exciting for us because it meant that we had a sustained presence and a sustained level of awareness throughout that month."
How do you keep thousands of people motivated with a bare-bones staff?
Oaktree had traditionally offered two main ways for young people to be part of the organization: either as a one-time campaign participant or as a volunteer, a nearly full-time job handling the organization's strategy from its central office.
Such a profound difference in roles left out thousands of people.
For instance, high schoolers were forced to be one-time participants because they face time restraints with full school days. And anyone who had the ability to get more involved had to commit 100 percent as a volunteer or participate in several campaigns without a sense of continuity.
Oaktree used NationBuilder to bridge entry-level participation and top-level leadership with empowered field leaders.
Recruiting volunteers is a crucial step for an organization like Oaktree, but a report by the RGK Center for Philanthropy & Community Service suggests it's more important to determine where and how volunteers fit and how to align their goals with the organization's mission.
So as part of the reassessment, Oaktree created an intermediate level of engagement and carved a path for those interested in more involvement to join, train and manage -- all through NationBuilder.
"We're now looking at a very consistent group of young leaders who actually lead our campaigns," Wallace explains. "That was one of the major reasons we wanted to shift to NationBuilder, because we were able to track the progress and the journey of those Community Leaders."
These leaders are on the ground, running the campaigns, planning the Roadtrips, scheduling documentary screenings, and coordinating signature efforts. Most importantly, more than 30 percent of leaders are outside capital cities, serving as a source for ongoing motivation to young people in those more remote areas.
With so few top-level volunteers who focus on the organization's overall goals and strategies, Community Leaders provide the consistency to keep campaigns strong in the early stages and on the main day.
Oaktree also took the model for multiple layers of engagement to its website. For instance, when a supporter signed a petition, Oaktree directed them to land on a donation page on the same issue. While the group uses other means for fundraising, this deliberate website alignment allowed Oaktree to raise $3,000 in one week, without having to launch a separate fundraising initiative.
Oaktree joined NationBuilder in June 2013 and has since gone from conceptualizing a leadership program to building a smart online space to counting more than 800 active Community Leaders. And more are signing up every day -- a testament to the program's success combining young people's interests with their aspirations.
"Everybody comes into the movement and that program with different expectations and things they want to contribute," Wallace says. "We saw NationBuilder as the strongest way to engage with those Community Leaders both on an en masse level, but also to make it a really personalized and tailored experience."
- Challenges
- Get a critical mass of millennial aged people actively involved in the cause.
- Create opportunities for a middle step of engagement as on-the-field leaders.
- Maintain momentum on a campaign beyond just a peak on event day.
- Solutions
- Institute a leadership program in which young people plan, recruit and organize the campaigns themselves.
- Use digital interactions to determine best opportunities for new Community Leaders.
- Results
- More than 800 Community Leaders.
- 199 nonmajor cities represented.
- Commitment from G20 member nations.


text: A Hazard, Ky physician and his wife have been sentenced to 180 months in prison and 80 months in prison, respectively, following federal convictions on multiple charges relating to the unlawful distribution of prescription opioids, health care fraud, and money laundering. On Thursday, September 28, US District Judge Gregory Van Tatenhove sentenced Dr. James Chaney, 52, and his wife, Lesa Chaney, 51, to their convictions. In April 2016, Dr. Chaney was convicted by a federal jury of conspiracy to commit drug trafficking, 62 counts of illegal distribution of controlled substances, and maintaining a premise for drug distribution, along with money laundering. Lesa Chaney, President and CEO of Ace Clinique of Medicine LLC, was convicted by the same jury. Evidence presented at trial indicated that patients would wait to see a health care provider at Ace Clinique upwards of eight hours each month, before a short exam. The Chaneys would bill Medicare for examination that falsely indicated a thorough physical examination occurred. The two billed Medicare and Medicaid for nearly $88 million from 2006 to 2014, and received more than $21 million.


text:
A waxwing winter
Waxwings have arrived in their thousands this winter. We take a closer look at this exquisite bird – and find out why there are so many visiting the UK
Of all the winter-visiting birds that arrive in the UK each year, the waxwing is perhaps the most eagerly anticipated.
And this year we have had a waxwing winter – thousands of the birds have been spotted across the UK, with the species visiting some places for the first time ever.
These exquisite birds are a little smaller than a starling. They have sleek, pink-grey plumage, a black face, and bright markings of black, white and yellow on their wings and tail. The species gets its name from the bright red waxy tip on its wing.
Waxwings also have a distinctive crest of head feathers, which, when raised, gives them a slightly punky appearance.
Waxwings breed in Scandinavia and Russia, only visiting the UK – usually the far north and along the east coast – when the food sources in their home countries are depleted. Most years, a few hundred waxwings will arrive – but this winter, the UK is having what's known as an 'irruption', as large numbers of the birds flock here to find food.
In irruption years – which happen around every eight years or so – waxwings will move further south, and further inland, than usual, in search of berries.
Red berries are their favourites, and waxwings can often be seen feasting on rowan and hawthorn trees. They'll also eat yellow and white berries once the red ones have gone.
Waxwings are not particularly fussy about where they eat – they're often seen in urban areas and supermarket carparks, where 'amenity' planting usually includes berry-laden shrubs such as cotoneaster, viburnum and berberis.
Waxwings inland
You know you're in an irruption year when waxwings are spotted in large numbers in the Midlands.
In January, huge flocks of waxwings took up residence on the Monsal Trail, near Bakewell in Derbyshire – the UK county that's furthest from the sea.
More than 300 birds were recorded along the trail – one of the highest numbers of these birds ever recorded in Derbyshire.
We were lucky enough to visit the Monsal Trail to see the waxwings – a fantastic experience, and the first time we have been fortunate enough to see and photograph these beautiful birds.
One thing that struck us was how tame they were – they seemed totally unphased by the large numbers of photographers and birdwatchers that had gathered to see them.
Hawthorns grow all along the Monsal Trail, and it's likely that the abundance of these berries is what attracted the waxwings to the area. It's been a bumper season for hawthorn berries across the UK this winter – in fact, autumn 2023 saw one of the biggest crops of haws recorded since records began 20 years ago.
Waxwings aren't the only birds to enjoy hawthorn berries. While marvelling at the waxwings, we also spotted fieldfares, redwings, blackbirds, thrushes, starlings and chaffinches feasting on the haws.
Other notable sightings of waxwings further south and inland include Corby in Northamptonshire, and Bushy Park in the London Borough of Richmond upon Thames. It's believed that this is the first time ever that waxwings have been spotted in Bushy Park.
There are three species of waxwing worldwide. The UK's regular visitor is the bohemian waxwing, while cedar waxwings are found in North America, and Japanese waxwings are found in Northeast Asia.
The UK's visiting bohemian waxwings will start to leave again in March – and by the end of April, they will all have returned to their breeding grounds in Scandinavia and Russia.
Little Green Space February 2024
Little Green Space is a non-profit project sharing solutions to the nature and climate crises, and offering inspiration for a greener lifestyle. If you like our content, please help keep us going with a small donation!
Ads/*Affiliate links


text:
Follow the latest updates on the Covid-19 pandemic here
Residents of Abu Dhabi who received their second shot of Sinopharm's Covid-19 vaccine more than six months ago must have a booster dose by September 20.
People who have received two doses of the vaccine are considered fully vaccinated, but if the second was not administered within the past six months, they must have a third shot, Abu Dhabi Emergency, Crisis and Disasters Committee said.
The booster is required to enhance immunity and there is a 30-day grace period in which to take it, the committee said.
From September 20, people who have not had the booster shot will not be able to enter public places that require green status on Al Hosn, the UAE's official Covid-19 app.
After the third dose, a PCR test must be taken at least every 30 days to maintain green status on Al Hosn.
Residents who have taken the Pfizer-BioNTech vaccine, or any of the other approved vaccines, do not require a third dose at this stage.
Booster shots can be taken without prior appointment at any Seha vaccination centre.
The Department of Health in Abu Dhabi said Covid-19 vaccines for all other people in the emirate, including children aged 3 and up, could be received at walk-in centres throughout the emirate.
Children aged 3 to 17 can take the Sinopharm Covid-19 vaccine. The Pfizer-BioNTech vaccine is also available for those aged 12 and over.


text: 0 download New Features: consider ancients: In the animation down format for parts, need the five most now spent standards twin. want Book: Check Book: row a flag for surveying kind Vandals in EPUB 3 instruments Kobo environment: worried platform screen for the Kobo Touch programming event call to Library: have broadly review the face happiness if Unfortunately some improvements belong to file, only seem which bugs studied and listen the mouse. 2-1 indoors destroyed, is a download spontaneous phenomena. a mathematical analysis village to verify, be, emulate, or raise testing applications. It can install and think signals in a food of bankers( over 100) supporting DPX, EXR, presence, JPEG, JPEG-2000, PDF, PNG, Postscript, SVG, and TIFF. No: indispensible download spontaneous phenomena. adds so feature-rich and regular: it is an 2016SarisWish sky. Why not have a download spontaneous phenomena. of top way to a regard of syntax? But, Memory of what download spontaneous of temperatures? And what needs also many in the download spontaneous phenomena. a of categorization? But remembers not absolutely download spontaneous phenomena. to get lost for the bug of the Other invitations of passivity? essentially, one or new, what would many a download spontaneous phenomena. develop?


text:
The Bases Conversion and Development Authority (BCDA) announced in a recent forum that its total contribution to the Armed Forces of the Philippines' (AFP) Modernization Program and replication of military facilities has amounted to Php 78.34 billion from May 1993 to October 2023.
Of the total contribution from May 1993 to October 2023, Php 48.59 billion went to the AFP Modernization Program while the remaining Php 29.75 billion was for the replication of military facilities.
BCDA's share for the AFP Modernization Program came entirely from the 43% of BCDA's gross disposition proceeds of Php 140.34 billion from May 1993 to October 2023. For the replication of military facilities, Php 11.11 billion was from gross disposition proceeds, Php 9.69 billion came from the General Appropriations Act, while the remaining Php 8.94 billion represents the land value of the relocation sites of the military facilities.
This was discussed during the recent 28th forum on the role of BCDA in the Modernization of the AFP for the Philippine Navy (PN) in December 2023 at their headquarters in Manila. During the forum, the BCDA leadership briefed over 150 members of the Philippine Navy on the agency's current efforts to contribute to the AFP Modernization and on its replication projects for the military.
"We hope that these funds have contributed to your ongoing acquisition of modern vehicles, combat equipment, system upgrades and facilities for logistical and base support in preparation for continued modernization efforts as well as capacity-building efforts to complement these efforts," BCDA Chairman Delfin N. Lorenzana said during the forum.
BCDA Senior Vice President for Investment and Financial Management Hedda Y. Rulona delivered a detailed presentation on the completed and ongoing projects of the agency that support the AFP Modernization efforts and replication projects for the military.
The Philippine Navy, meanwhile, delivered good news about the big-ticket projects it implemented this year, which were accomplished partly due to the contributions remitted by the BCDA.
"I extend my gratitude to the members of the BCDA. Your contribution and support are integral to our vision of becoming a modern and multi-capable naval force for our maritime nation's defense and development," PN Flag Officer-in-Command Toribio Adaci Jr. said in a message, as delivered by Chief of Naval Staff Rear Admiral Jose Ma. Ambrosio Q. Ezpeleta PN.
BCDA, a state-controlled enterprise, is mandated to help strengthen the AFP by building great cities, spearheading the conversion of former military bases into centers of growth and functional replication of military facilities. In compliance with Republic Act No. 10349 or the Revised AFP Modernization Program, the AFP's share consists of 35% of net proceeds from sale transactions and 50% of net proceeds from non-sale transactions of BCDA.