60#ifndef guWhiteboard_VisionControlStatus_h
61#define guWhiteboard_VisionControlStatus_h
63#ifdef WHITEBOARD_POSTER_STRING_CONVERSION
73#undef guWhiteboard_VisionControlStatus_DEFINED
74#define guWhiteboard_VisionControlStatus_DEFINED
76#undef VisionControlStatus_DEFINED
77#define VisionControlStatus_DEFINED
91 void init(
enum Resolutions t_cameraResolution =
VGA,
bool t_pipelineRunning =
true,
enum VisionCamera t_selectedCamera =
Top,
enum SaveFileType t_saveImage =
None,
bool t_saveClassifiedImage =
false,
enum NamedPipeline t_pipeline =
Soccer,
int t_chooseCamera = 0,
float t_confidence = 0.8f,
enum NeuralNetworkType t_networkTop =
v2,
enum NeuralNetworkType t_networkBottom =
v2,
enum StreamingType t_streamingSource =
Normal,
bool t_imageInput =
false,
int t_jpegStreamQuality = 30,
int t_jpegStreamStride = 4,
int t_frameRate = 0,
bool t_runPipelineOnce =
false, uint64_t t_frameNumber = 0, std::string t_colourCalibration =
"class",
struct timeval t_imageTime = {}) {
109 gu_strlcpy(
const_cast<char *
>(this->
colourCalibration()), t_colourCalibration.c_str(), 10);
118 VisionControlStatus(
enum Resolutions t_cameraResolution =
VGA,
bool t_pipelineRunning =
true,
enum VisionCamera t_selectedCamera =
Top,
enum SaveFileType t_saveImage =
None,
bool t_saveClassifiedImage =
false,
enum NamedPipeline t_pipeline =
Soccer,
int t_chooseCamera = 0,
float t_confidence = 0.8f,
enum NeuralNetworkType t_networkTop =
v2,
enum NeuralNetworkType t_networkBottom =
v2,
enum StreamingType t_streamingSource =
Normal,
bool t_imageInput =
false,
int t_jpegStreamQuality = 30,
int t_jpegStreamStride = 4,
int t_frameRate = 0,
bool t_runPipelineOnce =
false, uint64_t t_frameNumber = 0, std::string t_colourCalibration =
"class",
struct timeval t_imageTime = {}) {
119 this->init(t_cameraResolution, t_pipelineRunning, t_selectedCamera, t_saveImage, t_saveClassifiedImage, t_pipeline, t_chooseCamera, t_confidence, t_networkTop, t_networkBottom, t_streamingSource, t_imageInput, t_jpegStreamQuality, t_jpegStreamStride, t_frameRate, t_runPipelineOnce, t_frameNumber, t_colourCalibration, t_imageTime);
126 this->init(t_other.
cameraResolution(), t_other.
pipelineRunning(), t_other.
selectedCamera(), t_other.
saveImage(), t_other.
saveClassifiedImage(), t_other.
pipeline(), t_other.
chooseCamera(), t_other.
confidence(), t_other.
networkTop(), t_other.
networkBottom(), t_other.
streamingSource(), t_other.
imageInput(), t_other.
jpegStreamQuality(), t_other.
jpegStreamStride(), t_other.
frameRate(), t_other.
runPipelineOnce(), t_other.
frameNumber(), t_other.
colourCalibration(), t_other.
imageTime());
133 this->init(t_other.
cameraResolution, t_other.
pipelineRunning, t_other.
selectedCamera, t_other.
saveImage, t_other.
saveClassifiedImage, t_other.
pipeline, t_other.
chooseCamera, t_other.
confidence, t_other.
networkTop, t_other.
networkBottom, t_other.
streamingSource, t_other.
imageInput, t_other.
jpegStreamQuality, t_other.
jpegStreamStride, t_other.
frameRate, t_other.
runPipelineOnce, t_other.
frameNumber, t_other.
colourCalibration, t_other.
imageTime);
140 this->init(t_other.
cameraResolution(), t_other.
pipelineRunning(), t_other.
selectedCamera(), t_other.
saveImage(), t_other.
saveClassifiedImage(), t_other.
pipeline(), t_other.
chooseCamera(), t_other.
confidence(), t_other.
networkTop(), t_other.
networkBottom(), t_other.
streamingSource(), t_other.
imageInput(), t_other.
jpegStreamQuality(), t_other.
jpegStreamStride(), t_other.
frameRate(), t_other.
runPipelineOnce(), t_other.
frameNumber(), t_other.
colourCalibration(), t_other.
imageTime());
148 this->init(t_other.
cameraResolution, t_other.
pipelineRunning, t_other.
selectedCamera, t_other.
saveImage, t_other.
saveClassifiedImage, t_other.
pipeline, t_other.
chooseCamera, t_other.
confidence, t_other.
networkTop, t_other.
networkBottom, t_other.
streamingSource, t_other.
imageInput, t_other.
jpegStreamQuality, t_other.
jpegStreamStride, t_other.
frameRate, t_other.
runPipelineOnce, t_other.
frameNumber, t_other.
colourCalibration, t_other.
imageTime);
176 return !(*
this == t_other);
186 return !(*
this == t_other);
484#ifdef WHITEBOARD_POSTER_STRING_CONVERSION
494#ifdef USE_WB_VISION_CONTROL_STATUS_C_CONVERSION
497 std::string descr = buffer;
500 std::ostringstream ss;
504 ss <<
"cameraResolution=" <<
"HD_4VGA";
509 ss <<
"cameraResolution=" <<
"QQVGA";
514 ss <<
"cameraResolution=" <<
"QVGA";
519 ss <<
"cameraResolution=" <<
"SVGA";
524 ss <<
"cameraResolution=" <<
"VGA";
529 ss <<
"pipelineRunning=" << (this->
pipelineRunning() ?
"true" :
"false");
534 ss <<
"selectedCamera=" <<
"Bottom";
539 ss <<
"selectedCamera=" <<
"NUM_VISION_CAMERAS";
544 ss <<
"selectedCamera=" <<
"Top";
552 ss <<
"saveImage=" <<
"AI2";
557 ss <<
"saveImage=" <<
"AI3";
562 ss <<
"saveImage=" <<
"JPG";
567 ss <<
"saveImage=" <<
"None";
577 ss <<
"pipeline=" <<
"HTWK";
582 ss <<
"pipeline=" <<
"Neural_Network";
587 ss <<
"pipeline=" <<
"OpenCVFaces";
592 ss <<
"pipeline=" <<
"OpenChallenge";
597 ss <<
"pipeline=" <<
"Soccer";
602 ss <<
"pipeline=" <<
"Streaming";
607 ss <<
"chooseCamera=" <<
static_cast<signed>(this->
chooseCamera());
614 ss <<
"networkTop=" <<
"BallOnly";
619 ss <<
"networkTop=" <<
"VGANet";
624 ss <<
"networkTop=" <<
"Vanilla";
629 ss <<
"networkTop=" <<
"v2";
637 ss <<
"networkBottom=" <<
"BallOnly";
642 ss <<
"networkBottom=" <<
"VGANet";
647 ss <<
"networkBottom=" <<
"Vanilla";
652 ss <<
"networkBottom=" <<
"v2";
660 ss <<
"streamingSource=" <<
"Classified";
665 ss <<
"streamingSource=" <<
"Normal";
670 ss <<
"streamingSource=" <<
"Recognized";
675 ss <<
"imageInput=" << (this->
imageInput() ?
"true" :
"false");
681 ss <<
"frameRate=" <<
static_cast<signed>(this->
frameRate());
683 ss <<
"runPipelineOnce=" << (this->
runPipelineOnce() ?
"true" :
"false");
688 ss <<
"colourCalibration=" <<
"";
697#ifdef USE_WB_VISION_CONTROL_STATUS_C_CONVERSION
700 std::string toString = buffer;
703 std::ostringstream ss;
742 ss <<
"NUM_VISION_CAMERAS";
785 ss <<
"Neural_Network";
795 ss <<
"OpenChallenge";
878 ss << (this->
imageInput() ?
"true" :
"false");
884 ss << static_cast<signed>(this->
frameRate());
899#ifdef USE_WB_VISION_CONTROL_STATUS_C_CONVERSION
904 char * str_cstr =
const_cast<char *
>(t_str.c_str());
905 size_t temp_length = strlen(str_cstr);
906 int length = (temp_length <= INT_MAX) ? static_cast<int>(
static_cast<ssize_t
>(temp_length)) : -1;
911 char* var_str = &var_str_buffer[0];
913 char* key = &key_buffer[0];
920 if (index == 0 && str_cstr[0] ==
'{') {
926 for (
int i = index; i < length; i++) {
928 if (bracecount == 0 && str_cstr[i] ==
'=') {
933 if (bracecount == 0 && isspace(str_cstr[i])) {
940 if (bracecount == 0 && str_cstr[i] ==
',') {
944 if (str_cstr[i] ==
'{') {
948 if (str_cstr[i] ==
'}') {
950 if (bracecount < 0) {
955 if (i == length - 1) {
959 if (endKey >= startKey && endKey - startKey < length) {
960 strncpy(key, str_cstr + startKey,
static_cast<size_t>((endKey - startKey) + 1));
961 key[(endKey - startKey) + 1] = 0;
965 strncpy(var_str, str_cstr + startVar,
static_cast<size_t>((index - startVar) + 1));
966 var_str[(index - startVar) + 1] = 0;
972 if (strlen(key) > 0) {
973 if (0 == strcmp(
"cameraResolution", key)) {
975 }
else if (0 == strcmp(
"pipelineRunning", key)) {
977 }
else if (0 == strcmp(
"selectedCamera", key)) {
979 }
else if (0 == strcmp(
"saveImage", key)) {
981 }
else if (0 == strcmp(
"saveClassifiedImage", key)) {
983 }
else if (0 == strcmp(
"pipeline", key)) {
985 }
else if (0 == strcmp(
"chooseCamera", key)) {
987 }
else if (0 == strcmp(
"confidence", key)) {
989 }
else if (0 == strcmp(
"networkTop", key)) {
991 }
else if (0 == strcmp(
"networkBottom", key)) {
993 }
else if (0 == strcmp(
"streamingSource", key)) {
995 }
else if (0 == strcmp(
"imageInput", key)) {
997 }
else if (0 == strcmp(
"jpegStreamQuality", key)) {
999 }
else if (0 == strcmp(
"jpegStreamStride", key)) {
1001 }
else if (0 == strcmp(
"frameRate", key)) {
1003 }
else if (0 == strcmp(
"runPipelineOnce", key)) {
1005 }
else if (0 == strcmp(
"frameNumber", key)) {
1007 }
else if (0 == strcmp(
"colourCalibration", key)) {
1017 if (strcmp(
"HD_4VGA", var_str) == 0) {
1018#pragma clang diagnostic push
1019#pragma clang diagnostic ignored "-Wbad-function-cast"
1021#pragma clang diagnostic pop
1022 }
else if (strcmp(
"QQVGA", var_str) == 0) {
1023#pragma clang diagnostic push
1024#pragma clang diagnostic ignored "-Wbad-function-cast"
1026#pragma clang diagnostic pop
1027 }
else if (strcmp(
"QVGA", var_str) == 0) {
1028#pragma clang diagnostic push
1029#pragma clang diagnostic ignored "-Wbad-function-cast"
1031#pragma clang diagnostic pop
1032 }
else if (strcmp(
"SVGA", var_str) == 0) {
1033#pragma clang diagnostic push
1034#pragma clang diagnostic ignored "-Wbad-function-cast"
1036#pragma clang diagnostic pop
1037 }
else if (strcmp(
"VGA", var_str) == 0) {
1038#pragma clang diagnostic push
1039#pragma clang diagnostic ignored "-Wbad-function-cast"
1041#pragma clang diagnostic pop
1043#pragma clang diagnostic push
1044#pragma clang diagnostic ignored "-Wbad-function-cast"
1046#pragma clang diagnostic pop
1057 if (strcmp(
"Bottom", var_str) == 0) {
1058#pragma clang diagnostic push
1059#pragma clang diagnostic ignored "-Wbad-function-cast"
1061#pragma clang diagnostic pop
1062 }
else if (strcmp(
"NUM_VISION_CAMERAS", var_str) == 0) {
1063#pragma clang diagnostic push
1064#pragma clang diagnostic ignored "-Wbad-function-cast"
1066#pragma clang diagnostic pop
1067 }
else if (strcmp(
"Top", var_str) == 0) {
1068#pragma clang diagnostic push
1069#pragma clang diagnostic ignored "-Wbad-function-cast"
1071#pragma clang diagnostic pop
1073#pragma clang diagnostic push
1074#pragma clang diagnostic ignored "-Wbad-function-cast"
1076#pragma clang diagnostic pop
1082 if (strcmp(
"AI2", var_str) == 0) {
1083#pragma clang diagnostic push
1084#pragma clang diagnostic ignored "-Wbad-function-cast"
1086#pragma clang diagnostic pop
1087 }
else if (strcmp(
"AI3", var_str) == 0) {
1088#pragma clang diagnostic push
1089#pragma clang diagnostic ignored "-Wbad-function-cast"
1091#pragma clang diagnostic pop
1092 }
else if (strcmp(
"JPG", var_str) == 0) {
1093#pragma clang diagnostic push
1094#pragma clang diagnostic ignored "-Wbad-function-cast"
1096#pragma clang diagnostic pop
1097 }
else if (strcmp(
"None", var_str) == 0) {
1098#pragma clang diagnostic push
1099#pragma clang diagnostic ignored "-Wbad-function-cast"
1101#pragma clang diagnostic pop
1103#pragma clang diagnostic push
1104#pragma clang diagnostic ignored "-Wbad-function-cast"
1106#pragma clang diagnostic pop
1117 if (strcmp(
"HTWK", var_str) == 0) {
1118#pragma clang diagnostic push
1119#pragma clang diagnostic ignored "-Wbad-function-cast"
1121#pragma clang diagnostic pop
1122 }
else if (strcmp(
"Neural_Network", var_str) == 0) {
1123#pragma clang diagnostic push
1124#pragma clang diagnostic ignored "-Wbad-function-cast"
1126#pragma clang diagnostic pop
1127 }
else if (strcmp(
"OpenCVFaces", var_str) == 0) {
1128#pragma clang diagnostic push
1129#pragma clang diagnostic ignored "-Wbad-function-cast"
1131#pragma clang diagnostic pop
1132 }
else if (strcmp(
"OpenChallenge", var_str) == 0) {
1133#pragma clang diagnostic push
1134#pragma clang diagnostic ignored "-Wbad-function-cast"
1136#pragma clang diagnostic pop
1137 }
else if (strcmp(
"Soccer", var_str) == 0) {
1138#pragma clang diagnostic push
1139#pragma clang diagnostic ignored "-Wbad-function-cast"
1141#pragma clang diagnostic pop
1142 }
else if (strcmp(
"Streaming", var_str) == 0) {
1143#pragma clang diagnostic push
1144#pragma clang diagnostic ignored "-Wbad-function-cast"
1146#pragma clang diagnostic pop
1148#pragma clang diagnostic push
1149#pragma clang diagnostic ignored "-Wbad-function-cast"
1151#pragma clang diagnostic pop
1167 if (strcmp(
"BallOnly", var_str) == 0) {
1168#pragma clang diagnostic push
1169#pragma clang diagnostic ignored "-Wbad-function-cast"
1171#pragma clang diagnostic pop
1172 }
else if (strcmp(
"VGANet", var_str) == 0) {
1173#pragma clang diagnostic push
1174#pragma clang diagnostic ignored "-Wbad-function-cast"
1176#pragma clang diagnostic pop
1177 }
else if (strcmp(
"Vanilla", var_str) == 0) {
1178#pragma clang diagnostic push
1179#pragma clang diagnostic ignored "-Wbad-function-cast"
1181#pragma clang diagnostic pop
1182 }
else if (strcmp(
"v2", var_str) == 0) {
1183#pragma clang diagnostic push
1184#pragma clang diagnostic ignored "-Wbad-function-cast"
1186#pragma clang diagnostic pop
1188#pragma clang diagnostic push
1189#pragma clang diagnostic ignored "-Wbad-function-cast"
1191#pragma clang diagnostic pop
1197 if (strcmp(
"BallOnly", var_str) == 0) {
1198#pragma clang diagnostic push
1199#pragma clang diagnostic ignored "-Wbad-function-cast"
1201#pragma clang diagnostic pop
1202 }
else if (strcmp(
"VGANet", var_str) == 0) {
1203#pragma clang diagnostic push
1204#pragma clang diagnostic ignored "-Wbad-function-cast"
1206#pragma clang diagnostic pop
1207 }
else if (strcmp(
"Vanilla", var_str) == 0) {
1208#pragma clang diagnostic push
1209#pragma clang diagnostic ignored "-Wbad-function-cast"
1211#pragma clang diagnostic pop
1212 }
else if (strcmp(
"v2", var_str) == 0) {
1213#pragma clang diagnostic push
1214#pragma clang diagnostic ignored "-Wbad-function-cast"
1216#pragma clang diagnostic pop
1218#pragma clang diagnostic push
1219#pragma clang diagnostic ignored "-Wbad-function-cast"
1221#pragma clang diagnostic pop
1227 if (strcmp(
"Classified", var_str) == 0) {
1228#pragma clang diagnostic push
1229#pragma clang diagnostic ignored "-Wbad-function-cast"
1231#pragma clang diagnostic pop
1232 }
else if (strcmp(
"Normal", var_str) == 0) {
1233#pragma clang diagnostic push
1234#pragma clang diagnostic ignored "-Wbad-function-cast"
1236#pragma clang diagnostic pop
1237 }
else if (strcmp(
"Recognized", var_str) == 0) {
1238#pragma clang diagnostic push
1239#pragma clang diagnostic ignored "-Wbad-function-cast"
1241#pragma clang diagnostic pop
1243#pragma clang diagnostic push
1244#pragma clang diagnostic ignored "-Wbad-function-cast"
1246#pragma clang diagnostic pop
1252 this->
set_imageInput(strcmp(var_str,
"true") == 0 || strcmp(var_str,
"1") == 0);
1290 if (varIndex >= 0) {
1293 }
while(index < length);
1318 static const int Widths[] = {160, 320, 640, 1280, 800};
1319 return Widths[_resolution];
1325 static const int Heights[] = {120, 240, 480, 960, 600};
1326 return Heights[_resolution];
Resolution wrapper class for Resolutions enum Contains a Resolution and provides a number of convenie...
Provides a C++ wrapper around wb_vision_control_status.
void set_colourCalibration(const char *t_newValue)
void set_saveClassifiedImage(const bool &t_newValue)
const int & frameRate() const
void set_pipelineRunning(const bool &t_newValue)
VisionControlStatus(const std::string &t_str)
String Constructor.
enum Resolutions & cameraResolution()
size_t colourCalibration_size() const
void set_streamingSource(const enum StreamingType &t_newValue)
VisionControlStatus(const VisionControlStatus &t_other)
Copy Constructor.
void set_frameRate(const int &t_newValue)
enum VisionCamera & selectedCamera()
void set_frameNumber(const uint64_t &t_newValue)
const bool & pipelineRunning() const
enum NeuralNetworkType & networkBottom()
struct timeval & imageTime()
void set_selectedCamera(const enum VisionCamera &t_newValue)
void set_jpegStreamQuality(const int &t_newValue)
VisionControlStatus(enum Resolutions t_cameraResolution=VGA, bool t_pipelineRunning=true, enum VisionCamera t_selectedCamera=Top, enum SaveFileType t_saveImage=None, bool t_saveClassifiedImage=false, enum NamedPipeline t_pipeline=Soccer, int t_chooseCamera=0, float t_confidence=0.8f, enum NeuralNetworkType t_networkTop=v2, enum NeuralNetworkType t_networkBottom=v2, enum StreamingType t_streamingSource=Normal, bool t_imageInput=false, int t_jpegStreamQuality=30, int t_jpegStreamStride=4, int t_frameRate=0, bool t_runPipelineOnce=false, uint64_t t_frameNumber=0, std::string t_colourCalibration="class", struct timeval t_imageTime={})
Create a new VisionControlStatus.
bool operator==(const VisionControlStatus &t_other) const
enum NeuralNetworkType & networkTop() const
void set_jpegStreamStride(const int &t_newValue)
const uint64_t & frameNumber() const
const bool & imageInput() const
void set_imageTime(const struct timeval &t_newValue)
bool operator!=(const VisionControlStatus &t_other) const
enum Resolutions & cameraResolution() const
char & colourCalibration(int t_i)
void set_networkBottom(const enum NeuralNetworkType &t_newValue)
const char & colourCalibration(int t_i) const
enum StreamingType & streamingSource() const
void from_string(const std::string &t_str)
void set_runPipelineOnce(const bool &t_newValue)
VisionControlStatus(const struct wb_vision_control_status &t_other)
Copy Constructor.
void set_imageInput(const bool &t_newValue)
const float & confidence() const
enum NamedPipeline & pipeline() const
void set_networkTop(const enum NeuralNetworkType &t_newValue)
void set_saveImage(const enum SaveFileType &t_newValue)
void set_confidence(const float &t_newValue)
enum NamedPipeline & pipeline()
std::string description()
enum NeuralNetworkType & networkBottom() const
const bool & runPipelineOnce() const
enum StreamingType & streamingSource()
const int & chooseCamera() const
const int & jpegStreamStride() const
const struct timeval & imageTime() const
enum SaveFileType & saveImage()
void set_pipeline(const enum NamedPipeline &t_newValue)
enum VisionCamera & selectedCamera() const
int & jpegStreamQuality()
void set_chooseCamera(const int &t_newValue)
enum SaveFileType & saveImage() const
VisionControlStatus & operator=(const VisionControlStatus &t_other)
Copy Assignment Operator.
const bool & saveClassifiedImage() const
enum NeuralNetworkType & networkTop()
const char * colourCalibration() const
void set_cameraResolution(const enum Resolutions &t_newValue)
bool & saveClassifiedImage()
const int & jpegStreamQuality() const
WHITEBOARD_POSTER_STRING_CONVERSION.
enum NeuralNetworkType networkBottom
neural network to run on bottom camera
float confidence
Confidence threshold for the neural net.
int frameRate
The current framerate that the pipeline is running at.
int jpegStreamQuality
The quality to compress jpeg images at for streaming can be between 0 and 100.
enum VisionCamera selectedCamera
Which camera to use.
bool imageInput
Use /tmp/test.ai2 as pipeline image rather then camera if true.
struct timeval imageTime
the time that the image was taken that this status message refers to
bool runPipelineOnce
run the pipeline one time only if true
uint64_t frameNumber
The current frame number reported by guvison.
enum SaveFileType saveImage
Whether to save the image used in the next iteration of the pipeline to file.
int jpegStreamStride
The stride to use when streaming jpeg images.
char colourCalibration[10]
the DLC file to use for segmentation, searched in $HOME/data/ with the .dlc extension
int chooseCamera
Choose which camera to run on (0-Top, 1-Bottom, 2-Both)
bool saveClassifiedImage
Whether to save the classified version of the image used in the next iteration of the pipeline to fil...
enum NamedPipeline pipeline
vision pipeline to be run
enum NeuralNetworkType networkTop
neural network to run on top camera
enum Resolutions cameraResolution
Resolution that the camera should caputre images at.
bool pipelineRunning
Whether the pipeline is running or not.
enum StreamingType streamingSource
The type of streaming to be used.
const char * wb_vision_control_status_to_string(const struct wb_vision_control_status *self, char *toString, size_t bufferSize)
Convert to a string.
struct wb_vision_control_status * wb_vision_control_status_from_string(struct wb_vision_control_status *self, const char *str)
Convert from a string.
const char * wb_vision_control_status_description(const struct wb_vision_control_status *self, char *descString, size_t bufferSize)
Convert to a description string.
SaveFileType
List of file types that vision can save images as.
@ AI3
Raw YUV422 Image, with JSON image info blob.
NamedPipeline
Enum listing available vision pipelines.
@ Streaming
Pipeline that just streams images.
@ OpenChallenge
2013 Open Challange Pipeline
@ HTWK
Pipeline that runs htwk's image algorithms and post soccer object info to mipal whiteboard.
@ OpenCVFaces
Pipeline to recognise faces.
@ Neural_Network
Pipeline to rec objects with a nn.
Resolutions
Resolutions Supported by Vision.
#define VISION_CONTROL_STATUS_TO_STRING_BUFFER_SIZE
StreamingType
Streaming modes available in vision.
@ Recognized
Image showing only objects that have been recognised NYI.
@ Classified
Images that has been segmented into recognised colours.
@ Normal
Images straight from camera.
#define VISION_CONTROL_STATUS_DESC_BUFFER_SIZE
VisionCamera
Enum of available camera's that can be used by vision.
@ Bottom
Bottom Camera on the nao.
@ Top
Top Camera on the nao.
@ NUM_VISION_CAMERAS
Number of cameras used in vision.
NeuralNetworkType
List of neural network architectures that vision can run.
@ v2
Current default (separable convolutions)
@ BallOnly
PB_FCN v2 binary classifier.
@ VGANet
PB_FCN on VGA resolution.