├── .circleci └── config.yml ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── configuration └── config.json ├── image_classification_service ├── __main__.py ├── configuration.py └── imagenet │ ├── model_data │ ├── classify_image_graph_def.pb │ ├── imagenet_2012_challenge_label_map_proto.pbtxt │ └── imagenet_synset_to_human_label_map.txt │ └── node_lookup.py ├── requirements.txt ├── scripts ├── build-docker ├── run-snet-service └── test-call ├── service.json └── service_spec └── ExampleService.proto /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | docker: 5 | - image: circleci/python:3.6.6 6 | working_directory: ~/singnet/example-service 7 | environment: 8 | TRIGGER_BUILD_BRANCH: master 9 | steps: 10 | - checkout 11 | - run: 12 | name: Build example-service 13 | command: sudo pip3 install -r requirements.txt 14 | - run: 15 | name: Test example-service 16 | command: | 17 | cat > ./configuration/config.json << EOF 18 | { 19 | "SERVER_PORT": 5001, 20 | "MINIMUM_SCORE": 0.20, 21 | "LOG_LEVEL": 10 22 | } 23 | python image_classification_service & 24 | ./scripts/test-call 25 | - run: 26 | name: Trigger platform-pipeline build 27 | command: | 28 | if [ "$CIRCLE_BRANCH" == "$TRIGGER_BUILD_BRANCH" ] 29 | then 30 | curl -u ${CIRCLECI_PLATFORM_PIPELINE_TOKEN}: \ 31 | -d build_parameters[CIRCLE_JOB]=build \ 32 | -d build_parameters[PARENT_PROJECT_REPONAME]="$CIRCLE_PROJECT_REPONAME" \ 33 | -d build_parameters[PARENT_BRANCH]="$CIRCLE_BRANCH" \ 34 | -d build_parameters[PARENT_BUILD_URL]="$CIRCLE_BUILD_URL" \ 35 | https://circleci.com/api/v1.1/project/github/singnet/platform-pipeline/tree/${TRIGGER_BUILD_BRANCH} 36 | fi 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | venv/ 2 | .idea/ 3 | __pycache__/ 4 | snetd.db 5 | snetd.config 6 | 7 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.6.5-stretch 2 | ADD . / 3 | RUN pip3 install -r /requirements.txt 4 | RUN touch /snetd.config.json 5 | RUN apt-get install -y wget 6 | RUN wget https://github.com/singnet/snet-daemon/releases/download/v0.1.1/snetd-0.1.1.tar.gz 7 | RUN tar -xvf snetd-0.1.1.tar.gz 8 | CMD ["./scripts/run-snet-service"] 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 SingularityNET 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # example-service 2 | 3 | [![CircleCI](https://circleci.com/gh/singnet/example-service.svg?style=svg)](https://circleci.com/gh/singnet/example-service) 4 | 5 | Simple image classification service compatible with the SingularityNET daemon 6 | 7 | ## Getting Started 8 | 9 | ### Prerequisites 10 | 11 | * [Python 3.6.5](https://www.python.org/downloads/release/python-365/) 12 | 13 | ### Installing 14 | 15 | * Clone the git repository 16 | ```bash 17 | $ git clone git@github.com:singnet/example-service.git 18 | $ cd example-service 19 | ``` 20 | 21 | * Install the dependencies 22 | ```bash 23 | $ pip install -r requirements.txt 24 | ``` 25 | 26 | ### Configuration 27 | 28 | * The following default configuration can be overridden by populating configuration/config.json in the source tree with 29 | the desired values 30 | ```json 31 | { 32 | "SERVER_PORT": 5001, 33 | "MINIMUM_SCORE": 0.20, 34 | "LOG_LEVEL": 10 35 | } 36 | ``` 37 | * SERVER_PORT: the port on which the example service will listen for incoming JSON-RPC calls over http 38 | * MINIMUM_SCORE: the minimum confidence score (between 0 and 1 inclusive) required to return a given prediction 39 | * LOG_LEVEL: the logging verbosity 40 | 41 | ### Running 42 | 43 | #### Standalone 44 | 45 | * Invoke the example service directly 46 | ```bash 47 | $ python image_classification_service 48 | ``` 49 | 50 | #### With SingularityNET Daemon 51 | 52 | ##### SingularityNET Daemon Configuration 53 | 54 | Create `snetd.config.json` file containing the following: 55 | ```json 56 | { 57 | "passthrough_enabled": true 58 | } 59 | ``` 60 | in order to enable example service work with daemon. See [SingularityNet daemon configuration](https://github.com/singnet/snet-daemon/blob/master/README.md#configuration) for detailed configuration description. 61 | 62 | ##### Running Service + Daemon on Host 63 | 64 | * Invoke the run-snet-service script which launches both snetd and the example service 65 | ```bash 66 | $ ./scripts/run-snet-service 67 | ``` 68 | 69 | ##### Running Service + Daemon in Docker Container 70 | 71 | * Ensure that PASSTHROUGH_ENDPOINT is configured to be "http://127.0.0.1:5001" in your daemon configuration 72 | * Run the docker image with your daemon configuration (where HOST_PORT is the port you want the daemon bound to on your 73 | host) 74 | ```bash 75 | $ docker run --detach -p HOST_PORT:DAEMON_LISTENING_PORT -v /path/to/config:/snetd.config singularitynet/example-service:latest 76 | ``` 77 | 78 | ### Testing 79 | 80 | * Invoke the test-call script against a running instance of the example service 81 | ```bash 82 | $ ./scripts/test-call 83 | ``` 84 | 85 | ### Building Docker Image 86 | 87 | * Invoke the docker build script 88 | ```bash 89 | $ ./scripts/build-docker 90 | ``` 91 | 92 | ## License 93 | 94 | This project is licensed under the MIT License - see the 95 | [LICENSE](https://github.com/singnet/example-service/blob/master/LICENSE) file for details. 96 | -------------------------------------------------------------------------------- /configuration/config.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /image_classification_service/__main__.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import logging 3 | from pathlib import Path 4 | 5 | import tensorflow 6 | from aiohttp import web 7 | from jsonrpcserver.aio import methods 8 | from jsonrpcserver.exceptions import InvalidParams 9 | import sys 10 | sys.path.append(str(Path(__file__).absolute().parent.parent)) 11 | 12 | from image_classification_service import configuration as config 13 | from image_classification_service.imagenet.node_lookup import NodeLookup 14 | 15 | logger = logging.getLogger(__name__) 16 | app = web.Application() 17 | 18 | graph_path = Path(__file__).parent.joinpath("imagenet", "model_data", "classify_image_graph_def.pb") 19 | with tensorflow.gfile.FastGFile(str(graph_path), "rb") as f: 20 | graph_def = tensorflow.GraphDef() 21 | graph_def.ParseFromString(f.read()) 22 | tensorflow.import_graph_def(graph_def, name="") 23 | node_lookup = NodeLookup() 24 | session = tensorflow.Session() 25 | softmax_tensor = session.graph.get_tensor_by_name("softmax:0") 26 | 27 | 28 | @methods.add 29 | async def classify(**kwargs): 30 | image = kwargs.get("image", None) 31 | image_type = kwargs.get("image_type", None) 32 | 33 | if image is None: 34 | raise InvalidParams("image is required") 35 | 36 | if image_type is None: 37 | raise InvalidParams("image_type is required") 38 | 39 | binary_image = base64.b64decode(image) 40 | if image_type == 'jpeg' or image_type == 'jpg': 41 | decoder_key = 'DecodeJpeg/contents:0' 42 | elif image_type == 'png': 43 | decoder_key = 'DecodeJpeg/contents:0' 44 | elif image_type == 'gif': 45 | raise RuntimeError("TensorflowImageNet - cannot decode gif images") 46 | elif image_type == 'bmp': 47 | raise RuntimeError("TensorflowImageNet - cannot decode bmp images") 48 | else: 49 | decoder_key = 'DecodeJpeg/contents:0' 50 | logger.warning("Missing image type {0}".format(image_type)) 51 | 52 | logger.debug("classifying '{0}' image".format(image_type)) 53 | 54 | raw_predictions = session.run(softmax_tensor, {decoder_key: binary_image}) 55 | 56 | # Pull the predicted scorces out of the raw predictions. 57 | predicted_scores = raw_predictions[0] 58 | 59 | # Sort and strip off the top 5 predictions. 60 | top_predictions = predicted_scores.argsort()[-5:][::-1] 61 | image_predictions = [] 62 | image_scores = [] 63 | for predicted_node_id in top_predictions: 64 | # Get a text description for the top predicted node. 65 | description = node_lookup.id_to_string(predicted_node_id) 66 | 67 | # Cast to a float so JSON can serialize it. Normal Tensorflow float32 are not serializable. 68 | score = float(predicted_scores[predicted_node_id]) 69 | 70 | logger.debug(" prediction = '{0}', score = {1}".format(description, score)) 71 | 72 | # Add only those that exceed our minimum score to the predictions and scores lists. 73 | if score > config.MINIMUM_SCORE: 74 | image_predictions.append(description) 75 | image_scores.append(score) 76 | 77 | return {"predictions": image_predictions, "confidences": image_scores} 78 | 79 | 80 | async def handle(request): 81 | request = await request.text() 82 | response = await methods.dispatch(request) 83 | if response.is_notification: 84 | return web.Response() 85 | else: 86 | return web.json_response(response, status=response.http_status) 87 | 88 | 89 | if __name__ == '__main__': 90 | logging.basicConfig(level=config.LOG_LEVEL, format="%(asctime)s - [%(levelname)8s] - %(name)s - %(message)s") 91 | app.router.add_post('/', handle) 92 | web.run_app(app, host="127.0.0.1", port=config.SERVER_PORT) 93 | -------------------------------------------------------------------------------- /image_classification_service/configuration.py: -------------------------------------------------------------------------------- 1 | import json 2 | import logging 3 | import os 4 | import sys 5 | from pathlib import Path 6 | 7 | logger = logging.getLogger(__name__) 8 | 9 | SERVER_PORT = 5001 10 | MINIMUM_SCORE = 0.20 11 | LOG_LEVEL = 10 12 | 13 | # Override from file 14 | with open(Path(__file__).parent.parent.joinpath("configuration", "config.json")) as f: 15 | overrides = json.load(f) 16 | for k, v in overrides.items(): 17 | logger.debug("overriding config key %s with value %s from config file", k, v) 18 | setattr(sys.modules[__name__], k, v) 19 | 20 | # Override from environment variables 21 | for k in dir(sys.modules[__name__]): 22 | if os.environ.get(k, None) is not None: 23 | logger.debug("overriding config key %s with value %s from environment", k, os.environ[k]) 24 | setattr(sys.modules[__name__], k, os.environ[k]) 25 | -------------------------------------------------------------------------------- /image_classification_service/imagenet/model_data/classify_image_graph_def.pb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/singnet/sample-tensorflow-service/13cdfa81375fd0554d5071a47052268443944f68/image_classification_service/imagenet/model_data/classify_image_graph_def.pb -------------------------------------------------------------------------------- /image_classification_service/imagenet/model_data/imagenet_2012_challenge_label_map_proto.pbtxt: -------------------------------------------------------------------------------- 1 | # -*- protobuffer -*- 2 | # LabelMap from ImageNet 2012 full data set UID to int32 target class. 3 | entry { 4 | target_class: 449 5 | target_class_string: "n01440764" 6 | } 7 | entry { 8 | target_class: 450 9 | target_class_string: "n01443537" 10 | } 11 | entry { 12 | target_class: 442 13 | target_class_string: "n01484850" 14 | } 15 | entry { 16 | target_class: 443 17 | target_class_string: "n01491361" 18 | } 19 | entry { 20 | target_class: 444 21 | target_class_string: "n01494475" 22 | } 23 | entry { 24 | target_class: 445 25 | target_class_string: "n01496331" 26 | } 27 | entry { 28 | target_class: 446 29 | target_class_string: "n01498041" 30 | } 31 | entry { 32 | target_class: 383 33 | target_class_string: "n01514668" 34 | } 35 | entry { 36 | target_class: 384 37 | target_class_string: "n01514859" 38 | } 39 | entry { 40 | target_class: 385 41 | target_class_string: "n01518878" 42 | } 43 | entry { 44 | target_class: 386 45 | target_class_string: "n01530575" 46 | } 47 | entry { 48 | target_class: 387 49 | target_class_string: "n01531178" 50 | } 51 | entry { 52 | target_class: 388 53 | target_class_string: "n01532829" 54 | } 55 | entry { 56 | target_class: 389 57 | target_class_string: "n01534433" 58 | } 59 | entry { 60 | target_class: 390 61 | target_class_string: "n01537544" 62 | } 63 | entry { 64 | target_class: 391 65 | target_class_string: "n01558993" 66 | } 67 | entry { 68 | target_class: 392 69 | target_class_string: "n01560419" 70 | } 71 | entry { 72 | target_class: 393 73 | target_class_string: "n01580077" 74 | } 75 | entry { 76 | target_class: 394 77 | target_class_string: "n01582220" 78 | } 79 | entry { 80 | target_class: 395 81 | target_class_string: "n01592084" 82 | } 83 | entry { 84 | target_class: 396 85 | target_class_string: "n01601694" 86 | } 87 | entry { 88 | target_class: 397 89 | target_class_string: "n01608432" 90 | } 91 | entry { 92 | target_class: 398 93 | target_class_string: "n01614925" 94 | } 95 | entry { 96 | target_class: 399 97 | target_class_string: "n01616318" 98 | } 99 | entry { 100 | target_class: 400 101 | target_class_string: "n01622779" 102 | } 103 | entry { 104 | target_class: 494 105 | target_class_string: "n01629819" 106 | } 107 | entry { 108 | target_class: 495 109 | target_class_string: "n01630670" 110 | } 111 | entry { 112 | target_class: 496 113 | target_class_string: "n01631663" 114 | } 115 | entry { 116 | target_class: 497 117 | target_class_string: "n01632458" 118 | } 119 | entry { 120 | target_class: 498 121 | target_class_string: "n01632777" 122 | } 123 | entry { 124 | target_class: 499 125 | target_class_string: "n01641577" 126 | } 127 | entry { 128 | target_class: 500 129 | target_class_string: "n01644373" 130 | } 131 | entry { 132 | target_class: 501 133 | target_class_string: "n01644900" 134 | } 135 | entry { 136 | target_class: 458 137 | target_class_string: "n01664065" 138 | } 139 | entry { 140 | target_class: 459 141 | target_class_string: "n01665541" 142 | } 143 | entry { 144 | target_class: 460 145 | target_class_string: "n01667114" 146 | } 147 | entry { 148 | target_class: 461 149 | target_class_string: "n01667778" 150 | } 151 | entry { 152 | target_class: 462 153 | target_class_string: "n01669191" 154 | } 155 | entry { 156 | target_class: 463 157 | target_class_string: "n01675722" 158 | } 159 | entry { 160 | target_class: 464 161 | target_class_string: "n01677366" 162 | } 163 | entry { 164 | target_class: 465 165 | target_class_string: "n01682714" 166 | } 167 | entry { 168 | target_class: 466 169 | target_class_string: "n01685808" 170 | } 171 | entry { 172 | target_class: 467 173 | target_class_string: "n01687978" 174 | } 175 | entry { 176 | target_class: 468 177 | target_class_string: "n01688243" 178 | } 179 | entry { 180 | target_class: 469 181 | target_class_string: "n01689811" 182 | } 183 | entry { 184 | target_class: 470 185 | target_class_string: "n01692333" 186 | } 187 | entry { 188 | target_class: 471 189 | target_class_string: "n01693334" 190 | } 191 | entry { 192 | target_class: 472 193 | target_class_string: "n01694178" 194 | } 195 | entry { 196 | target_class: 473 197 | target_class_string: "n01695060" 198 | } 199 | entry { 200 | target_class: 475 201 | target_class_string: "n01697457" 202 | } 203 | entry { 204 | target_class: 476 205 | target_class_string: "n01698640" 206 | } 207 | entry { 208 | target_class: 474 209 | target_class_string: "n01704323" 210 | } 211 | entry { 212 | target_class: 477 213 | target_class_string: "n01728572" 214 | } 215 | entry { 216 | target_class: 478 217 | target_class_string: "n01728920" 218 | } 219 | entry { 220 | target_class: 479 221 | target_class_string: "n01729322" 222 | } 223 | entry { 224 | target_class: 480 225 | target_class_string: "n01729977" 226 | } 227 | entry { 228 | target_class: 481 229 | target_class_string: "n01734418" 230 | } 231 | entry { 232 | target_class: 482 233 | target_class_string: "n01735189" 234 | } 235 | entry { 236 | target_class: 483 237 | target_class_string: "n01737021" 238 | } 239 | entry { 240 | target_class: 484 241 | target_class_string: "n01739381" 242 | } 243 | entry { 244 | target_class: 485 245 | target_class_string: "n01740131" 246 | } 247 | entry { 248 | target_class: 486 249 | target_class_string: "n01742172" 250 | } 251 | entry { 252 | target_class: 487 253 | target_class_string: "n01744401" 254 | } 255 | entry { 256 | target_class: 488 257 | target_class_string: "n01748264" 258 | } 259 | entry { 260 | target_class: 489 261 | target_class_string: "n01749939" 262 | } 263 | entry { 264 | target_class: 490 265 | target_class_string: "n01751748" 266 | } 267 | entry { 268 | target_class: 491 269 | target_class_string: "n01753488" 270 | } 271 | entry { 272 | target_class: 492 273 | target_class_string: "n01755581" 274 | } 275 | entry { 276 | target_class: 493 277 | target_class_string: "n01756291" 278 | } 279 | entry { 280 | target_class: 601 281 | target_class_string: "n01768244" 282 | } 283 | entry { 284 | target_class: 602 285 | target_class_string: "n01770081" 286 | } 287 | entry { 288 | target_class: 603 289 | target_class_string: "n01770393" 290 | } 291 | entry { 292 | target_class: 604 293 | target_class_string: "n01773157" 294 | } 295 | entry { 296 | target_class: 605 297 | target_class_string: "n01773549" 298 | } 299 | entry { 300 | target_class: 606 301 | target_class_string: "n01773797" 302 | } 303 | entry { 304 | target_class: 607 305 | target_class_string: "n01774384" 306 | } 307 | entry { 308 | target_class: 608 309 | target_class_string: "n01774750" 310 | } 311 | entry { 312 | target_class: 609 313 | target_class_string: "n01775062" 314 | } 315 | entry { 316 | target_class: 610 317 | target_class_string: "n01776313" 318 | } 319 | entry { 320 | target_class: 611 321 | target_class_string: "n01784675" 322 | } 323 | entry { 324 | target_class: 401 325 | target_class_string: "n01795545" 326 | } 327 | entry { 328 | target_class: 402 329 | target_class_string: "n01796340" 330 | } 331 | entry { 332 | target_class: 403 333 | target_class_string: "n01797886" 334 | } 335 | entry { 336 | target_class: 404 337 | target_class_string: "n01798484" 338 | } 339 | entry { 340 | target_class: 405 341 | target_class_string: "n01806143" 342 | } 343 | entry { 344 | target_class: 406 345 | target_class_string: "n01806567" 346 | } 347 | entry { 348 | target_class: 407 349 | target_class_string: "n01807496" 350 | } 351 | entry { 352 | target_class: 408 353 | target_class_string: "n01817953" 354 | } 355 | entry { 356 | target_class: 409 357 | target_class_string: "n01818515" 358 | } 359 | entry { 360 | target_class: 410 361 | target_class_string: "n01819313" 362 | } 363 | entry { 364 | target_class: 411 365 | target_class_string: "n01820546" 366 | } 367 | entry { 368 | target_class: 412 369 | target_class_string: "n01824575" 370 | } 371 | entry { 372 | target_class: 413 373 | target_class_string: "n01828970" 374 | } 375 | entry { 376 | target_class: 414 377 | target_class_string: "n01829413" 378 | } 379 | entry { 380 | target_class: 415 381 | target_class_string: "n01833805" 382 | } 383 | entry { 384 | target_class: 416 385 | target_class_string: "n01843065" 386 | } 387 | entry { 388 | target_class: 417 389 | target_class_string: "n01843383" 390 | } 391 | entry { 392 | target_class: 418 393 | target_class_string: "n01847000" 394 | } 395 | entry { 396 | target_class: 419 397 | target_class_string: "n01855032" 398 | } 399 | entry { 400 | target_class: 420 401 | target_class_string: "n01855672" 402 | } 403 | entry { 404 | target_class: 421 405 | target_class_string: "n01860187" 406 | } 407 | entry { 408 | target_class: 214 409 | target_class_string: "n01871265" 410 | } 411 | entry { 412 | target_class: 215 413 | target_class_string: "n01872401" 414 | } 415 | entry { 416 | target_class: 217 417 | target_class_string: "n01873310" 418 | } 419 | entry { 420 | target_class: 216 421 | target_class_string: "n01877812" 422 | } 423 | entry { 424 | target_class: 213 425 | target_class_string: "n01882714" 426 | } 427 | entry { 428 | target_class: 218 429 | target_class_string: "n01883070" 430 | } 431 | entry { 432 | target_class: 647 433 | target_class_string: "n01910747" 434 | } 435 | entry { 436 | target_class: 648 437 | target_class_string: "n01914609" 438 | } 439 | entry { 440 | target_class: 649 441 | target_class_string: "n01917289" 442 | } 443 | entry { 444 | target_class: 650 445 | target_class_string: "n01924916" 446 | } 447 | entry { 448 | target_class: 651 449 | target_class_string: "n01930112" 450 | } 451 | entry { 452 | target_class: 652 453 | target_class_string: "n01943899" 454 | } 455 | entry { 456 | target_class: 653 457 | target_class_string: "n01944390" 458 | } 459 | entry { 460 | target_class: 654 461 | target_class_string: "n01945685" 462 | } 463 | entry { 464 | target_class: 655 465 | target_class_string: "n01950731" 466 | } 467 | entry { 468 | target_class: 656 469 | target_class_string: "n01955084" 470 | } 471 | entry { 472 | target_class: 226 473 | target_class_string: "n01968897" 474 | } 475 | entry { 476 | target_class: 613 477 | target_class_string: "n01978287" 478 | } 479 | entry { 480 | target_class: 614 481 | target_class_string: "n01978455" 482 | } 483 | entry { 484 | target_class: 615 485 | target_class_string: "n01980166" 486 | } 487 | entry { 488 | target_class: 616 489 | target_class_string: "n01981276" 490 | } 491 | entry { 492 | target_class: 617 493 | target_class_string: "n01983481" 494 | } 495 | entry { 496 | target_class: 618 497 | target_class_string: "n01984695" 498 | } 499 | entry { 500 | target_class: 619 501 | target_class_string: "n01985128" 502 | } 503 | entry { 504 | target_class: 620 505 | target_class_string: "n01986214" 506 | } 507 | entry { 508 | target_class: 612 509 | target_class_string: "n01990800" 510 | } 511 | entry { 512 | target_class: 422 513 | target_class_string: "n02002556" 514 | } 515 | entry { 516 | target_class: 423 517 | target_class_string: "n02002724" 518 | } 519 | entry { 520 | target_class: 424 521 | target_class_string: "n02006656" 522 | } 523 | entry { 524 | target_class: 425 525 | target_class_string: "n02007558" 526 | } 527 | entry { 528 | target_class: 427 529 | target_class_string: "n02009229" 530 | } 531 | entry { 532 | target_class: 426 533 | target_class_string: "n02009912" 534 | } 535 | entry { 536 | target_class: 428 537 | target_class_string: "n02011460" 538 | } 539 | entry { 540 | target_class: 429 541 | target_class_string: "n02012849" 542 | } 543 | entry { 544 | target_class: 430 545 | target_class_string: "n02013706" 546 | } 547 | entry { 548 | target_class: 438 549 | target_class_string: "n02017213" 550 | } 551 | entry { 552 | target_class: 431 553 | target_class_string: "n02018207" 554 | } 555 | entry { 556 | target_class: 432 557 | target_class_string: "n02018795" 558 | } 559 | entry { 560 | target_class: 433 561 | target_class_string: "n02025239" 562 | } 563 | entry { 564 | target_class: 434 565 | target_class_string: "n02027492" 566 | } 567 | entry { 568 | target_class: 435 569 | target_class_string: "n02028035" 570 | } 571 | entry { 572 | target_class: 436 573 | target_class_string: "n02033041" 574 | } 575 | entry { 576 | target_class: 437 577 | target_class_string: "n02037110" 578 | } 579 | entry { 580 | target_class: 439 581 | target_class_string: "n02051845" 582 | } 583 | entry { 584 | target_class: 440 585 | target_class_string: "n02056570" 586 | } 587 | entry { 588 | target_class: 441 589 | target_class_string: "n02058221" 590 | } 591 | entry { 592 | target_class: 6 593 | target_class_string: "n02066245" 594 | } 595 | entry { 596 | target_class: 22 597 | target_class_string: "n02071294" 598 | } 599 | entry { 600 | target_class: 193 601 | target_class_string: "n02074367" 602 | } 603 | entry { 604 | target_class: 14 605 | target_class_string: "n02077923" 606 | } 607 | entry { 608 | target_class: 173 609 | target_class_string: "n02085620" 610 | } 611 | entry { 612 | target_class: 99 613 | target_class_string: "n02085782" 614 | } 615 | entry { 616 | target_class: 87 617 | target_class_string: "n02085936" 618 | } 619 | entry { 620 | target_class: 69 621 | target_class_string: "n02086079" 622 | } 623 | entry { 624 | target_class: 116 625 | target_class_string: "n02086240" 626 | } 627 | entry { 628 | target_class: 198 629 | target_class_string: "n02086646" 630 | } 631 | entry { 632 | target_class: 43 633 | target_class_string: "n02086910" 634 | } 635 | entry { 636 | target_class: 89 637 | target_class_string: "n02087046" 638 | } 639 | entry { 640 | target_class: 200 641 | target_class_string: "n02087394" 642 | } 643 | entry { 644 | target_class: 98 645 | target_class_string: "n02088094" 646 | } 647 | entry { 648 | target_class: 161 649 | target_class_string: "n02088238" 650 | } 651 | entry { 652 | target_class: 132 653 | target_class_string: "n02088364" 654 | } 655 | entry { 656 | target_class: 32 657 | target_class_string: "n02088466" 658 | } 659 | entry { 660 | target_class: 180 661 | target_class_string: "n02088632" 662 | } 663 | entry { 664 | target_class: 42 665 | target_class_string: "n02089078" 666 | } 667 | entry { 668 | target_class: 18 669 | target_class_string: "n02089867" 670 | } 671 | entry { 672 | target_class: 207 673 | target_class_string: "n02089973" 674 | } 675 | entry { 676 | target_class: 181 677 | target_class_string: "n02090379" 678 | } 679 | entry { 680 | target_class: 105 681 | target_class_string: "n02090622" 682 | } 683 | entry { 684 | target_class: 77 685 | target_class_string: "n02090721" 686 | } 687 | entry { 688 | target_class: 189 689 | target_class_string: "n02091032" 690 | } 691 | entry { 692 | target_class: 20 693 | target_class_string: "n02091134" 694 | } 695 | entry { 696 | target_class: 204 697 | target_class_string: "n02091244" 698 | } 699 | entry { 700 | target_class: 63 701 | target_class_string: "n02091467" 702 | } 703 | entry { 704 | target_class: 31 705 | target_class_string: "n02091635" 706 | } 707 | entry { 708 | target_class: 66 709 | target_class_string: "n02091831" 710 | } 711 | entry { 712 | target_class: 21 713 | target_class_string: "n02092002" 714 | } 715 | entry { 716 | target_class: 25 717 | target_class_string: "n02092339" 718 | } 719 | entry { 720 | target_class: 45 721 | target_class_string: "n02093256" 722 | } 723 | entry { 724 | target_class: 170 725 | target_class_string: "n02093428" 726 | } 727 | entry { 728 | target_class: 119 729 | target_class_string: "n02093647" 730 | } 731 | entry { 732 | target_class: 210 733 | target_class_string: "n02093754" 734 | } 735 | entry { 736 | target_class: 107 737 | target_class_string: "n02093859" 738 | } 739 | entry { 740 | target_class: 126 741 | target_class_string: "n02093991" 742 | } 743 | entry { 744 | target_class: 88 745 | target_class_string: "n02094114" 746 | } 747 | entry { 748 | target_class: 145 749 | target_class_string: "n02094258" 750 | } 751 | entry { 752 | target_class: 59 753 | target_class_string: "n02094433" 754 | } 755 | entry { 756 | target_class: 160 757 | target_class_string: "n02095314" 758 | } 759 | entry { 760 | target_class: 152 761 | target_class_string: "n02095570" 762 | } 763 | entry { 764 | target_class: 72 765 | target_class_string: "n02095889" 766 | } 767 | entry { 768 | target_class: 33 769 | target_class_string: "n02096051" 770 | } 771 | entry { 772 | target_class: 91 773 | target_class_string: "n02096177" 774 | } 775 | entry { 776 | target_class: 4 777 | target_class_string: "n02096294" 778 | } 779 | entry { 780 | target_class: 27 781 | target_class_string: "n02096437" 782 | } 783 | entry { 784 | target_class: 113 785 | target_class_string: "n02096585" 786 | } 787 | entry { 788 | target_class: 123 789 | target_class_string: "n02097047" 790 | } 791 | entry { 792 | target_class: 36 793 | target_class_string: "n02097130" 794 | } 795 | entry { 796 | target_class: 156 797 | target_class_string: "n02097209" 798 | } 799 | entry { 800 | target_class: 109 801 | target_class_string: "n02097298" 802 | } 803 | entry { 804 | target_class: 158 805 | target_class_string: "n02097474" 806 | } 807 | entry { 808 | target_class: 131 809 | target_class_string: "n02097658" 810 | } 811 | entry { 812 | target_class: 26 813 | target_class_string: "n02098105" 814 | } 815 | entry { 816 | target_class: 71 817 | target_class_string: "n02098286" 818 | } 819 | entry { 820 | target_class: 56 821 | target_class_string: "n02098413" 822 | } 823 | entry { 824 | target_class: 146 825 | target_class_string: "n02099267" 826 | } 827 | entry { 828 | target_class: 144 829 | target_class_string: "n02099429" 830 | } 831 | entry { 832 | target_class: 125 833 | target_class_string: "n02099601" 834 | } 835 | entry { 836 | target_class: 176 837 | target_class_string: "n02099712" 838 | } 839 | entry { 840 | target_class: 139 841 | target_class_string: "n02099849" 842 | } 843 | entry { 844 | target_class: 134 845 | target_class_string: "n02100236" 846 | } 847 | entry { 848 | target_class: 90 849 | target_class_string: "n02100583" 850 | } 851 | entry { 852 | target_class: 2 853 | target_class_string: "n02100735" 854 | } 855 | entry { 856 | target_class: 192 857 | target_class_string: "n02100877" 858 | } 859 | entry { 860 | target_class: 154 861 | target_class_string: "n02101006" 862 | } 863 | entry { 864 | target_class: 150 865 | target_class_string: "n02101388" 866 | } 867 | entry { 868 | target_class: 94 869 | target_class_string: "n02101556" 870 | } 871 | entry { 872 | target_class: 5 873 | target_class_string: "n02102040" 874 | } 875 | entry { 876 | target_class: 19 877 | target_class_string: "n02102177" 878 | } 879 | entry { 880 | target_class: 191 881 | target_class_string: "n02102318" 882 | } 883 | entry { 884 | target_class: 196 885 | target_class_string: "n02102480" 886 | } 887 | entry { 888 | target_class: 117 889 | target_class_string: "n02102973" 890 | } 891 | entry { 892 | target_class: 141 893 | target_class_string: "n02104029" 894 | } 895 | entry { 896 | target_class: 68 897 | target_class_string: "n02104365" 898 | } 899 | entry { 900 | target_class: 93 901 | target_class_string: "n02105056" 902 | } 903 | entry { 904 | target_class: 51 905 | target_class_string: "n02105162" 906 | } 907 | entry { 908 | target_class: 208 909 | target_class_string: "n02105251" 910 | } 911 | entry { 912 | target_class: 184 913 | target_class_string: "n02105412" 914 | } 915 | entry { 916 | target_class: 97 917 | target_class_string: "n02105505" 918 | } 919 | entry { 920 | target_class: 29 921 | target_class_string: "n02105641" 922 | } 923 | entry { 924 | target_class: 171 925 | target_class_string: "n02105855" 926 | } 927 | entry { 928 | target_class: 124 929 | target_class_string: "n02106030" 930 | } 931 | entry { 932 | target_class: 128 933 | target_class_string: "n02106166" 934 | } 935 | entry { 936 | target_class: 47 937 | target_class_string: "n02106382" 938 | } 939 | entry { 940 | target_class: 64 941 | target_class_string: "n02106550" 942 | } 943 | entry { 944 | target_class: 211 945 | target_class_string: "n02106662" 946 | } 947 | entry { 948 | target_class: 112 949 | target_class_string: "n02107142" 950 | } 951 | entry { 952 | target_class: 187 953 | target_class_string: "n02107312" 954 | } 955 | entry { 956 | target_class: 114 957 | target_class_string: "n02107574" 958 | } 959 | entry { 960 | target_class: 86 961 | target_class_string: "n02107683" 962 | } 963 | entry { 964 | target_class: 115 965 | target_class_string: "n02107908" 966 | } 967 | entry { 968 | target_class: 79 969 | target_class_string: "n02108000" 970 | } 971 | entry { 972 | target_class: 130 973 | target_class_string: "n02108089" 974 | } 975 | entry { 976 | target_class: 140 977 | target_class_string: "n02108422" 978 | } 979 | entry { 980 | target_class: 110 981 | target_class_string: "n02108551" 982 | } 983 | entry { 984 | target_class: 82 985 | target_class_string: "n02108915" 986 | } 987 | entry { 988 | target_class: 17 989 | target_class_string: "n02109047" 990 | } 991 | entry { 992 | target_class: 177 993 | target_class_string: "n02109525" 994 | } 995 | entry { 996 | target_class: 149 997 | target_class_string: "n02109961" 998 | } 999 | entry { 1000 | target_class: 15 1001 | target_class_string: "n02110063" 1002 | } 1003 | entry { 1004 | target_class: 3 1005 | target_class_string: "n02110185" 1006 | } 1007 | entry { 1008 | target_class: 41 1009 | target_class_string: "n02110341" 1010 | } 1011 | entry { 1012 | target_class: 127 1013 | target_class_string: "n02110627" 1014 | } 1015 | entry { 1016 | target_class: 84 1017 | target_class_string: "n02110806" 1018 | } 1019 | entry { 1020 | target_class: 143 1021 | target_class_string: "n02110958" 1022 | } 1023 | entry { 1024 | target_class: 133 1025 | target_class_string: "n02111129" 1026 | } 1027 | entry { 1028 | target_class: 60 1029 | target_class_string: "n02111277" 1030 | } 1031 | entry { 1032 | target_class: 172 1033 | target_class_string: "n02111500" 1034 | } 1035 | entry { 1036 | target_class: 179 1037 | target_class_string: "n02111889" 1038 | } 1039 | entry { 1040 | target_class: 118 1041 | target_class_string: "n02112018" 1042 | } 1043 | entry { 1044 | target_class: 168 1045 | target_class_string: "n02112137" 1046 | } 1047 | entry { 1048 | target_class: 148 1049 | target_class_string: "n02112350" 1050 | } 1051 | entry { 1052 | target_class: 70 1053 | target_class_string: "n02112706" 1054 | } 1055 | entry { 1056 | target_class: 197 1057 | target_class_string: "n02113023" 1058 | } 1059 | entry { 1060 | target_class: 50 1061 | target_class_string: "n02113186" 1062 | } 1063 | entry { 1064 | target_class: 106 1065 | target_class_string: "n02113624" 1066 | } 1067 | entry { 1068 | target_class: 49 1069 | target_class_string: "n02113712" 1070 | } 1071 | entry { 1072 | target_class: 151 1073 | target_class_string: "n02113799" 1074 | } 1075 | entry { 1076 | target_class: 46 1077 | target_class_string: "n02113978" 1078 | } 1079 | entry { 1080 | target_class: 205 1081 | target_class_string: "n02114367" 1082 | } 1083 | entry { 1084 | target_class: 102 1085 | target_class_string: "n02114548" 1086 | } 1087 | entry { 1088 | target_class: 28 1089 | target_class_string: "n02114712" 1090 | } 1091 | entry { 1092 | target_class: 58 1093 | target_class_string: "n02114855" 1094 | } 1095 | entry { 1096 | target_class: 155 1097 | target_class_string: "n02115641" 1098 | } 1099 | entry { 1100 | target_class: 136 1101 | target_class_string: "n02115913" 1102 | } 1103 | entry { 1104 | target_class: 202 1105 | target_class_string: "n02116738" 1106 | } 1107 | entry { 1108 | target_class: 34 1109 | target_class_string: "n02117135" 1110 | } 1111 | entry { 1112 | target_class: 62 1113 | target_class_string: "n02119022" 1114 | } 1115 | entry { 1116 | target_class: 1 1117 | target_class_string: "n02119789" 1118 | } 1119 | entry { 1120 | target_class: 159 1121 | target_class_string: "n02120079" 1122 | } 1123 | entry { 1124 | target_class: 67 1125 | target_class_string: "n02120505" 1126 | } 1127 | entry { 1128 | target_class: 174 1129 | target_class_string: "n02123045" 1130 | } 1131 | entry { 1132 | target_class: 55 1133 | target_class_string: "n02123159" 1134 | } 1135 | entry { 1136 | target_class: 10 1137 | target_class_string: "n02123394" 1138 | } 1139 | entry { 1140 | target_class: 95 1141 | target_class_string: "n02123597" 1142 | } 1143 | entry { 1144 | target_class: 8 1145 | target_class_string: "n02124075" 1146 | } 1147 | entry { 1148 | target_class: 11 1149 | target_class_string: "n02125311" 1150 | } 1151 | entry { 1152 | target_class: 201 1153 | target_class_string: "n02127052" 1154 | } 1155 | entry { 1156 | target_class: 85 1157 | target_class_string: "n02128385" 1158 | } 1159 | entry { 1160 | target_class: 153 1161 | target_class_string: "n02128757" 1162 | } 1163 | entry { 1164 | target_class: 30 1165 | target_class_string: "n02128925" 1166 | } 1167 | entry { 1168 | target_class: 190 1169 | target_class_string: "n02129165" 1170 | } 1171 | entry { 1172 | target_class: 76 1173 | target_class_string: "n02129604" 1174 | } 1175 | entry { 1176 | target_class: 206 1177 | target_class_string: "n02130308" 1178 | } 1179 | entry { 1180 | target_class: 61 1181 | target_class_string: "n02132136" 1182 | } 1183 | entry { 1184 | target_class: 163 1185 | target_class_string: "n02133161" 1186 | } 1187 | entry { 1188 | target_class: 103 1189 | target_class_string: "n02134084" 1190 | } 1191 | entry { 1192 | target_class: 209 1193 | target_class_string: "n02134418" 1194 | } 1195 | entry { 1196 | target_class: 74 1197 | target_class_string: "n02137549" 1198 | } 1199 | entry { 1200 | target_class: 35 1201 | target_class_string: "n02138441" 1202 | } 1203 | entry { 1204 | target_class: 621 1205 | target_class_string: "n02165105" 1206 | } 1207 | entry { 1208 | target_class: 622 1209 | target_class_string: "n02165456" 1210 | } 1211 | entry { 1212 | target_class: 623 1213 | target_class_string: "n02167151" 1214 | } 1215 | entry { 1216 | target_class: 624 1217 | target_class_string: "n02168699" 1218 | } 1219 | entry { 1220 | target_class: 625 1221 | target_class_string: "n02169497" 1222 | } 1223 | entry { 1224 | target_class: 626 1225 | target_class_string: "n02172182" 1226 | } 1227 | entry { 1228 | target_class: 627 1229 | target_class_string: "n02174001" 1230 | } 1231 | entry { 1232 | target_class: 628 1233 | target_class_string: "n02177972" 1234 | } 1235 | entry { 1236 | target_class: 629 1237 | target_class_string: "n02190166" 1238 | } 1239 | entry { 1240 | target_class: 630 1241 | target_class_string: "n02206856" 1242 | } 1243 | entry { 1244 | target_class: 224 1245 | target_class_string: "n02219486" 1246 | } 1247 | entry { 1248 | target_class: 631 1249 | target_class_string: "n02226429" 1250 | } 1251 | entry { 1252 | target_class: 632 1253 | target_class_string: "n02229544" 1254 | } 1255 | entry { 1256 | target_class: 633 1257 | target_class_string: "n02231487" 1258 | } 1259 | entry { 1260 | target_class: 634 1261 | target_class_string: "n02233338" 1262 | } 1263 | entry { 1264 | target_class: 635 1265 | target_class_string: "n02236044" 1266 | } 1267 | entry { 1268 | target_class: 636 1269 | target_class_string: "n02256656" 1270 | } 1271 | entry { 1272 | target_class: 637 1273 | target_class_string: "n02259212" 1274 | } 1275 | entry { 1276 | target_class: 638 1277 | target_class_string: "n02264363" 1278 | } 1279 | entry { 1280 | target_class: 639 1281 | target_class_string: "n02268443" 1282 | } 1283 | entry { 1284 | target_class: 640 1285 | target_class_string: "n02268853" 1286 | } 1287 | entry { 1288 | target_class: 641 1289 | target_class_string: "n02276258" 1290 | } 1291 | entry { 1292 | target_class: 642 1293 | target_class_string: "n02277742" 1294 | } 1295 | entry { 1296 | target_class: 643 1297 | target_class_string: "n02279972" 1298 | } 1299 | entry { 1300 | target_class: 644 1301 | target_class_string: "n02280649" 1302 | } 1303 | entry { 1304 | target_class: 645 1305 | target_class_string: "n02281406" 1306 | } 1307 | entry { 1308 | target_class: 646 1309 | target_class_string: "n02281787" 1310 | } 1311 | entry { 1312 | target_class: 225 1313 | target_class_string: "n02317335" 1314 | } 1315 | entry { 1316 | target_class: 657 1317 | target_class_string: "n02319095" 1318 | } 1319 | entry { 1320 | target_class: 658 1321 | target_class_string: "n02321529" 1322 | } 1323 | entry { 1324 | target_class: 188 1325 | target_class_string: "n02325366" 1326 | } 1327 | entry { 1328 | target_class: 129 1329 | target_class_string: "n02326432" 1330 | } 1331 | entry { 1332 | target_class: 164 1333 | target_class_string: "n02328150" 1334 | } 1335 | entry { 1336 | target_class: 157 1337 | target_class_string: "n02342885" 1338 | } 1339 | entry { 1340 | target_class: 13 1341 | target_class_string: "n02346627" 1342 | } 1343 | entry { 1344 | target_class: 53 1345 | target_class_string: "n02356798" 1346 | } 1347 | entry { 1348 | target_class: 183 1349 | target_class_string: "n02361337" 1350 | } 1351 | entry { 1352 | target_class: 195 1353 | target_class_string: "n02363005" 1354 | } 1355 | entry { 1356 | target_class: 101 1357 | target_class_string: "n02364673" 1358 | } 1359 | entry { 1360 | target_class: 39 1361 | target_class_string: "n02389026" 1362 | } 1363 | entry { 1364 | target_class: 80 1365 | target_class_string: "n02391049" 1366 | } 1367 | entry { 1368 | target_class: 147 1369 | target_class_string: "n02395406" 1370 | } 1371 | entry { 1372 | target_class: 78 1373 | target_class_string: "n02396427" 1374 | } 1375 | entry { 1376 | target_class: 120 1377 | target_class_string: "n02397096" 1378 | } 1379 | entry { 1380 | target_class: 167 1381 | target_class_string: "n02398521" 1382 | } 1383 | entry { 1384 | target_class: 108 1385 | target_class_string: "n02403003" 1386 | } 1387 | entry { 1388 | target_class: 162 1389 | target_class_string: "n02408429" 1390 | } 1391 | entry { 1392 | target_class: 165 1393 | target_class_string: "n02410509" 1394 | } 1395 | entry { 1396 | target_class: 81 1397 | target_class_string: "n02412080" 1398 | } 1399 | entry { 1400 | target_class: 52 1401 | target_class_string: "n02415577" 1402 | } 1403 | entry { 1404 | target_class: 9 1405 | target_class_string: "n02417914" 1406 | } 1407 | entry { 1408 | target_class: 65 1409 | target_class_string: "n02422106" 1410 | } 1411 | entry { 1412 | target_class: 57 1413 | target_class_string: "n02422699" 1414 | } 1415 | entry { 1416 | target_class: 12 1417 | target_class_string: "n02423022" 1418 | } 1419 | entry { 1420 | target_class: 121 1421 | target_class_string: "n02437312" 1422 | } 1423 | entry { 1424 | target_class: 186 1425 | target_class_string: "n02437616" 1426 | } 1427 | entry { 1428 | target_class: 48 1429 | target_class_string: "n02441942" 1430 | } 1431 | entry { 1432 | target_class: 23 1433 | target_class_string: "n02442845" 1434 | } 1435 | entry { 1436 | target_class: 182 1437 | target_class_string: "n02443114" 1438 | } 1439 | entry { 1440 | target_class: 40 1441 | target_class_string: "n02443484" 1442 | } 1443 | entry { 1444 | target_class: 212 1445 | target_class_string: "n02444819" 1446 | } 1447 | entry { 1448 | target_class: 44 1449 | target_class_string: "n02445715" 1450 | } 1451 | entry { 1452 | target_class: 16 1453 | target_class_string: "n02447366" 1454 | } 1455 | entry { 1456 | target_class: 178 1457 | target_class_string: "n02454379" 1458 | } 1459 | entry { 1460 | target_class: 38 1461 | target_class_string: "n02457408" 1462 | } 1463 | entry { 1464 | target_class: 83 1465 | target_class_string: "n02480495" 1466 | } 1467 | entry { 1468 | target_class: 104 1469 | target_class_string: "n02480855" 1470 | } 1471 | entry { 1472 | target_class: 96 1473 | target_class_string: "n02481823" 1474 | } 1475 | entry { 1476 | target_class: 185 1477 | target_class_string: "n02483362" 1478 | } 1479 | entry { 1480 | target_class: 122 1481 | target_class_string: "n02483708" 1482 | } 1483 | entry { 1484 | target_class: 73 1485 | target_class_string: "n02484975" 1486 | } 1487 | entry { 1488 | target_class: 135 1489 | target_class_string: "n02486261" 1490 | } 1491 | entry { 1492 | target_class: 137 1493 | target_class_string: "n02486410" 1494 | } 1495 | entry { 1496 | target_class: 138 1497 | target_class_string: "n02487347" 1498 | } 1499 | entry { 1500 | target_class: 203 1501 | target_class_string: "n02488291" 1502 | } 1503 | entry { 1504 | target_class: 54 1505 | target_class_string: "n02488702" 1506 | } 1507 | entry { 1508 | target_class: 100 1509 | target_class_string: "n02489166" 1510 | } 1511 | entry { 1512 | target_class: 175 1513 | target_class_string: "n02490219" 1514 | } 1515 | entry { 1516 | target_class: 142 1517 | target_class_string: "n02492035" 1518 | } 1519 | entry { 1520 | target_class: 166 1521 | target_class_string: "n02492660" 1522 | } 1523 | entry { 1524 | target_class: 37 1525 | target_class_string: "n02493509" 1526 | } 1527 | entry { 1528 | target_class: 111 1529 | target_class_string: "n02493793" 1530 | } 1531 | entry { 1532 | target_class: 92 1533 | target_class_string: "n02494079" 1534 | } 1535 | entry { 1536 | target_class: 199 1537 | target_class_string: "n02497673" 1538 | } 1539 | entry { 1540 | target_class: 75 1541 | target_class_string: "n02500267" 1542 | } 1543 | entry { 1544 | target_class: 194 1545 | target_class_string: "n02504013" 1546 | } 1547 | entry { 1548 | target_class: 24 1549 | target_class_string: "n02504458" 1550 | } 1551 | entry { 1552 | target_class: 7 1553 | target_class_string: "n02509815" 1554 | } 1555 | entry { 1556 | target_class: 169 1557 | target_class_string: "n02510455" 1558 | } 1559 | entry { 1560 | target_class: 447 1561 | target_class_string: "n02514041" 1562 | } 1563 | entry { 1564 | target_class: 451 1565 | target_class_string: "n02526121" 1566 | } 1567 | entry { 1568 | target_class: 448 1569 | target_class_string: "n02536864" 1570 | } 1571 | entry { 1572 | target_class: 452 1573 | target_class_string: "n02606052" 1574 | } 1575 | entry { 1576 | target_class: 453 1577 | target_class_string: "n02607072" 1578 | } 1579 | entry { 1580 | target_class: 456 1581 | target_class_string: "n02640242" 1582 | } 1583 | entry { 1584 | target_class: 457 1585 | target_class_string: "n02641379" 1586 | } 1587 | entry { 1588 | target_class: 454 1589 | target_class_string: "n02643566" 1590 | } 1591 | entry { 1592 | target_class: 455 1593 | target_class_string: "n02655020" 1594 | } 1595 | entry { 1596 | target_class: 547 1597 | target_class_string: "n02666196" 1598 | } 1599 | entry { 1600 | target_class: 853 1601 | target_class_string: "n02667093" 1602 | } 1603 | entry { 1604 | target_class: 896 1605 | target_class_string: "n02669723" 1606 | } 1607 | entry { 1608 | target_class: 223 1609 | target_class_string: "n02672831" 1610 | } 1611 | entry { 1612 | target_class: 345 1613 | target_class_string: "n02676566" 1614 | } 1615 | entry { 1616 | target_class: 246 1617 | target_class_string: "n02687172" 1618 | } 1619 | entry { 1620 | target_class: 230 1621 | target_class_string: "n02690373" 1622 | } 1623 | entry { 1624 | target_class: 232 1625 | target_class_string: "n02692877" 1626 | } 1627 | entry { 1628 | target_class: 677 1629 | target_class_string: "n02699494" 1630 | } 1631 | entry { 1632 | target_class: 265 1633 | target_class_string: "n02701002" 1634 | } 1635 | entry { 1636 | target_class: 264 1637 | target_class_string: "n02704792" 1638 | } 1639 | entry { 1640 | target_class: 522 1641 | target_class_string: "n02708093" 1642 | } 1643 | entry { 1644 | target_class: 688 1645 | target_class_string: "n02727426" 1646 | } 1647 | entry { 1648 | target_class: 845 1649 | target_class_string: "n02730930" 1650 | } 1651 | entry { 1652 | target_class: 752 1653 | target_class_string: "n02747177" 1654 | } 1655 | entry { 1656 | target_class: 540 1657 | target_class_string: "n02749479" 1658 | } 1659 | entry { 1660 | target_class: 847 1661 | target_class_string: "n02769748" 1662 | } 1663 | entry { 1664 | target_class: 704 1665 | target_class_string: "n02776631" 1666 | } 1667 | entry { 1668 | target_class: 767 1669 | target_class_string: "n02777292" 1670 | } 1671 | entry { 1672 | target_class: 233 1673 | target_class_string: "n02782093" 1674 | } 1675 | entry { 1676 | target_class: 907 1677 | target_class_string: "n02783161" 1678 | } 1679 | entry { 1680 | target_class: 967 1681 | target_class_string: "n02786058" 1682 | } 1683 | entry { 1684 | target_class: 341 1685 | target_class_string: "n02787622" 1686 | } 1687 | entry { 1688 | target_class: 718 1689 | target_class_string: "n02788148" 1690 | } 1691 | entry { 1692 | target_class: 916 1693 | target_class_string: "n02790996" 1694 | } 1695 | entry { 1696 | target_class: 307 1697 | target_class_string: "n02791124" 1698 | } 1699 | entry { 1700 | target_class: 705 1701 | target_class_string: "n02791270" 1702 | } 1703 | entry { 1704 | target_class: 683 1705 | target_class_string: "n02793495" 1706 | } 1707 | entry { 1708 | target_class: 518 1709 | target_class_string: "n02794156" 1710 | } 1711 | entry { 1712 | target_class: 905 1713 | target_class_string: "n02795169" 1714 | } 1715 | entry { 1716 | target_class: 258 1717 | target_class_string: "n02797295" 1718 | } 1719 | entry { 1720 | target_class: 807 1721 | target_class_string: "n02799071" 1722 | } 1723 | entry { 1724 | target_class: 908 1725 | target_class_string: "n02802426" 1726 | } 1727 | entry { 1728 | target_class: 296 1729 | target_class_string: "n02804414" 1730 | } 1731 | entry { 1732 | target_class: 353 1733 | target_class_string: "n02804610" 1734 | } 1735 | entry { 1736 | target_class: 785 1737 | target_class_string: "n02807133" 1738 | } 1739 | entry { 1740 | target_class: 909 1741 | target_class_string: "n02808304" 1742 | } 1743 | entry { 1744 | target_class: 884 1745 | target_class_string: "n02808440" 1746 | } 1747 | entry { 1748 | target_class: 266 1749 | target_class_string: "n02814533" 1750 | } 1751 | entry { 1752 | target_class: 733 1753 | target_class_string: "n02814860" 1754 | } 1755 | entry { 1756 | target_class: 991 1757 | target_class_string: "n02815834" 1758 | } 1759 | entry { 1760 | target_class: 849 1761 | target_class_string: "n02817516" 1762 | } 1763 | entry { 1764 | target_class: 777 1765 | target_class_string: "n02823428" 1766 | } 1767 | entry { 1768 | target_class: 811 1769 | target_class_string: "n02823750" 1770 | } 1771 | entry { 1772 | target_class: 933 1773 | target_class_string: "n02825657" 1774 | } 1775 | entry { 1776 | target_class: 941 1777 | target_class_string: "n02834397" 1778 | } 1779 | entry { 1780 | target_class: 254 1781 | target_class_string: "n02835271" 1782 | } 1783 | entry { 1784 | target_class: 985 1785 | target_class_string: "n02837789" 1786 | } 1787 | entry { 1788 | target_class: 835 1789 | target_class_string: "n02840245" 1790 | } 1791 | entry { 1792 | target_class: 533 1793 | target_class_string: "n02841315" 1794 | } 1795 | entry { 1796 | target_class: 839 1797 | target_class_string: "n02843684" 1798 | } 1799 | entry { 1800 | target_class: 689 1801 | target_class_string: "n02859443" 1802 | } 1803 | entry { 1804 | target_class: 252 1805 | target_class_string: "n02860847" 1806 | } 1807 | entry { 1808 | target_class: 940 1809 | target_class_string: "n02865351" 1810 | } 1811 | entry { 1812 | target_class: 805 1813 | target_class_string: "n02869837" 1814 | } 1815 | entry { 1816 | target_class: 300 1817 | target_class_string: "n02870880" 1818 | } 1819 | entry { 1820 | target_class: 706 1821 | target_class_string: "n02871525" 1822 | } 1823 | entry { 1824 | target_class: 779 1825 | target_class_string: "n02877765" 1826 | } 1827 | entry { 1828 | target_class: 538 1829 | target_class_string: "n02879718" 1830 | } 1831 | entry { 1832 | target_class: 817 1833 | target_class_string: "n02883205" 1834 | } 1835 | entry { 1836 | target_class: 716 1837 | target_class_string: "n02892201" 1838 | } 1839 | entry { 1840 | target_class: 872 1841 | target_class_string: "n02892767" 1842 | } 1843 | entry { 1844 | target_class: 719 1845 | target_class_string: "n02894605" 1846 | } 1847 | entry { 1848 | target_class: 949 1849 | target_class_string: "n02895154" 1850 | } 1851 | entry { 1852 | target_class: 851 1853 | target_class_string: "n02906734" 1854 | } 1855 | entry { 1856 | target_class: 820 1857 | target_class_string: "n02909870" 1858 | } 1859 | entry { 1860 | target_class: 580 1861 | target_class_string: "n02910353" 1862 | } 1863 | entry { 1864 | target_class: 833 1865 | target_class_string: "n02916936" 1866 | } 1867 | entry { 1868 | target_class: 887 1869 | target_class_string: "n02917067" 1870 | } 1871 | entry { 1872 | target_class: 707 1873 | target_class_string: "n02927161" 1874 | } 1875 | entry { 1876 | target_class: 267 1877 | target_class_string: "n02930766" 1878 | } 1879 | entry { 1880 | target_class: 673 1881 | target_class_string: "n02939185" 1882 | } 1883 | entry { 1884 | target_class: 591 1885 | target_class_string: "n02948072" 1886 | } 1887 | entry { 1888 | target_class: 539 1889 | target_class_string: "n02950826" 1890 | } 1891 | entry { 1892 | target_class: 239 1893 | target_class_string: "n02951358" 1894 | } 1895 | entry { 1896 | target_class: 377 1897 | target_class_string: "n02951585" 1898 | } 1899 | entry { 1900 | target_class: 836 1901 | target_class_string: "n02963159" 1902 | } 1903 | entry { 1904 | target_class: 576 1905 | target_class_string: "n02965783" 1906 | } 1907 | entry { 1908 | target_class: 568 1909 | target_class_string: "n02966193" 1910 | } 1911 | entry { 1912 | target_class: 891 1913 | target_class_string: "n02966687" 1914 | } 1915 | entry { 1916 | target_class: 749 1917 | target_class_string: "n02971356" 1918 | } 1919 | entry { 1920 | target_class: 563 1921 | target_class_string: "n02974003" 1922 | } 1923 | entry { 1924 | target_class: 548 1925 | target_class_string: "n02977058" 1926 | } 1927 | entry { 1928 | target_class: 890 1929 | target_class_string: "n02978881" 1930 | } 1931 | entry { 1932 | target_class: 929 1933 | target_class_string: "n02979186" 1934 | } 1935 | entry { 1936 | target_class: 701 1937 | target_class_string: "n02980441" 1938 | } 1939 | entry { 1940 | target_class: 241 1941 | target_class_string: "n02981792" 1942 | } 1943 | entry { 1944 | target_class: 987 1945 | target_class_string: "n02988304" 1946 | } 1947 | entry { 1948 | target_class: 342 1949 | target_class_string: "n02992211" 1950 | } 1951 | entry { 1952 | target_class: 914 1953 | target_class_string: "n02992529" 1954 | } 1955 | entry { 1956 | target_class: 827 1957 | target_class_string: "n02999410" 1958 | } 1959 | entry { 1960 | target_class: 721 1961 | target_class_string: "n03000134" 1962 | } 1963 | entry { 1964 | target_class: 902 1965 | target_class_string: "n03000247" 1966 | } 1967 | entry { 1968 | target_class: 382 1969 | target_class_string: "n03000684" 1970 | } 1971 | entry { 1972 | target_class: 762 1973 | target_class_string: "n03014705" 1974 | } 1975 | entry { 1976 | target_class: 303 1977 | target_class_string: "n03016953" 1978 | } 1979 | entry { 1980 | target_class: 335 1981 | target_class_string: "n03017168" 1982 | } 1983 | entry { 1984 | target_class: 301 1985 | target_class_string: "n03018349" 1986 | } 1987 | entry { 1988 | target_class: 801 1989 | target_class_string: "n03026506" 1990 | } 1991 | entry { 1992 | target_class: 690 1993 | target_class_string: "n03028079" 1994 | } 1995 | entry { 1996 | target_class: 695 1997 | target_class_string: "n03032252" 1998 | } 1999 | entry { 2000 | target_class: 370 2001 | target_class_string: "n03041632" 2002 | } 2003 | entry { 2004 | target_class: 713 2005 | target_class_string: "n03042490" 2006 | } 2007 | entry { 2008 | target_class: 797 2009 | target_class_string: "n03045698" 2010 | } 2011 | entry { 2012 | target_class: 979 2013 | target_class_string: "n03047690" 2014 | } 2015 | entry { 2016 | target_class: 761 2017 | target_class_string: "n03062245" 2018 | } 2019 | entry { 2020 | target_class: 996 2021 | target_class_string: "n03063599" 2022 | } 2023 | entry { 2024 | target_class: 674 2025 | target_class_string: "n03063689" 2026 | } 2027 | entry { 2028 | target_class: 698 2029 | target_class_string: "n03065424" 2030 | } 2031 | entry { 2032 | target_class: 583 2033 | target_class_string: "n03075370" 2034 | } 2035 | entry { 2036 | target_class: 543 2037 | target_class_string: "n03085013" 2038 | } 2039 | entry { 2040 | target_class: 708 2041 | target_class_string: "n03089624" 2042 | } 2043 | entry { 2044 | target_class: 243 2045 | target_class_string: "n03095699" 2046 | } 2047 | entry { 2048 | target_class: 268 2049 | target_class_string: "n03100240" 2050 | } 2051 | entry { 2052 | target_class: 376 2053 | target_class_string: "n03109150" 2054 | } 2055 | entry { 2056 | target_class: 347 2057 | target_class_string: "n03110669" 2058 | } 2059 | entry { 2060 | target_class: 910 2061 | target_class_string: "n03124043" 2062 | } 2063 | entry { 2064 | target_class: 881 2065 | target_class_string: "n03124170" 2066 | } 2067 | entry { 2068 | target_class: 297 2069 | target_class_string: "n03125729" 2070 | } 2071 | entry { 2072 | target_class: 545 2073 | target_class_string: "n03126707" 2074 | } 2075 | entry { 2076 | target_class: 778 2077 | target_class_string: "n03127747" 2078 | } 2079 | entry { 2080 | target_class: 898 2081 | target_class_string: "n03127925" 2082 | } 2083 | entry { 2084 | target_class: 298 2085 | target_class_string: "n03131574" 2086 | } 2087 | entry { 2088 | target_class: 670 2089 | target_class_string: "n03133878" 2090 | } 2091 | entry { 2092 | target_class: 756 2093 | target_class_string: "n03134739" 2094 | } 2095 | entry { 2096 | target_class: 856 2097 | target_class_string: "n03141823" 2098 | } 2099 | entry { 2100 | target_class: 865 2101 | target_class_string: "n03146219" 2102 | } 2103 | entry { 2104 | target_class: 720 2105 | target_class_string: "n03160309" 2106 | } 2107 | entry { 2108 | target_class: 313 2109 | target_class_string: "n03179701" 2110 | } 2111 | entry { 2112 | target_class: 550 2113 | target_class_string: "n03180011" 2114 | } 2115 | entry { 2116 | target_class: 959 2117 | target_class_string: "n03187595" 2118 | } 2119 | entry { 2120 | target_class: 966 2121 | target_class_string: "n03188531" 2122 | } 2123 | entry { 2124 | target_class: 523 2125 | target_class_string: "n03196217" 2126 | } 2127 | entry { 2128 | target_class: 529 2129 | target_class_string: "n03197337" 2130 | } 2131 | entry { 2132 | target_class: 315 2133 | target_class_string: "n03201208" 2134 | } 2135 | entry { 2136 | target_class: 821 2137 | target_class_string: "n03207743" 2138 | } 2139 | entry { 2140 | target_class: 667 2141 | target_class_string: "n03207941" 2142 | } 2143 | entry { 2144 | target_class: 579 2145 | target_class_string: "n03208938" 2146 | } 2147 | entry { 2148 | target_class: 715 2149 | target_class_string: "n03216828" 2150 | } 2151 | entry { 2152 | target_class: 253 2153 | target_class_string: "n03218198" 2154 | } 2155 | entry { 2156 | target_class: 897 2157 | target_class_string: "n03220513" 2158 | } 2159 | entry { 2160 | target_class: 972 2161 | target_class_string: "n03223299" 2162 | } 2163 | entry { 2164 | target_class: 834 2165 | target_class_string: "n03240683" 2166 | } 2167 | entry { 2168 | target_class: 336 2169 | target_class_string: "n03249569" 2170 | } 2171 | entry { 2172 | target_class: 799 2173 | target_class_string: "n03250847" 2174 | } 2175 | entry { 2176 | target_class: 1000 2177 | target_class_string: "n03255030" 2178 | } 2179 | entry { 2180 | target_class: 662 2181 | target_class_string: "n03259280" 2182 | } 2183 | entry { 2184 | target_class: 512 2185 | target_class_string: "n03271574" 2186 | } 2187 | entry { 2188 | target_class: 346 2189 | target_class_string: "n03272010" 2190 | } 2191 | entry { 2192 | target_class: 262 2193 | target_class_string: "n03272562" 2194 | } 2195 | entry { 2196 | target_class: 316 2197 | target_class_string: "n03290653" 2198 | } 2199 | entry { 2200 | target_class: 879 2201 | target_class_string: "n03291819" 2202 | } 2203 | entry { 2204 | target_class: 660 2205 | target_class_string: "n03297495" 2206 | } 2207 | entry { 2208 | target_class: 808 2209 | target_class_string: "n03314780" 2210 | } 2211 | entry { 2212 | target_class: 796 2213 | target_class_string: "n03325584" 2214 | } 2215 | entry { 2216 | target_class: 305 2217 | target_class_string: "n03337140" 2218 | } 2219 | entry { 2220 | target_class: 235 2221 | target_class_string: "n03344393" 2222 | } 2223 | entry { 2224 | target_class: 279 2225 | target_class_string: "n03345487" 2226 | } 2227 | entry { 2228 | target_class: 919 2229 | target_class_string: "n03347037" 2230 | } 2231 | entry { 2232 | target_class: 995 2233 | target_class_string: "n03355925" 2234 | } 2235 | entry { 2236 | target_class: 356 2237 | target_class_string: "n03372029" 2238 | } 2239 | entry { 2240 | target_class: 309 2241 | target_class_string: "n03376595" 2242 | } 2243 | entry { 2244 | target_class: 784 2245 | target_class_string: "n03379051" 2246 | } 2247 | entry { 2248 | target_class: 261 2249 | target_class_string: "n03384352" 2250 | } 2251 | entry { 2252 | target_class: 712 2253 | target_class_string: "n03388043" 2254 | } 2255 | entry { 2256 | target_class: 934 2257 | target_class_string: "n03388183" 2258 | } 2259 | entry { 2260 | target_class: 299 2261 | target_class_string: "n03388549" 2262 | } 2263 | entry { 2264 | target_class: 256 2265 | target_class_string: "n03393912" 2266 | } 2267 | entry { 2268 | target_class: 348 2269 | target_class_string: "n03394916" 2270 | } 2271 | entry { 2272 | target_class: 671 2273 | target_class_string: "n03400231" 2274 | } 2275 | entry { 2276 | target_class: 757 2277 | target_class_string: "n03404251" 2278 | } 2279 | entry { 2280 | target_class: 280 2281 | target_class_string: "n03417042" 2282 | } 2283 | entry { 2284 | target_class: 971 2285 | target_class_string: "n03424325" 2286 | } 2287 | entry { 2288 | target_class: 567 2289 | target_class_string: "n03425413" 2290 | } 2291 | entry { 2292 | target_class: 955 2293 | target_class_string: "n03443371" 2294 | } 2295 | entry { 2296 | target_class: 275 2297 | target_class_string: "n03444034" 2298 | } 2299 | entry { 2300 | target_class: 792 2301 | target_class_string: "n03445777" 2302 | } 2303 | entry { 2304 | target_class: 276 2305 | target_class_string: "n03445924" 2306 | } 2307 | entry { 2308 | target_class: 236 2309 | target_class_string: "n03447447" 2310 | } 2311 | entry { 2312 | target_class: 337 2313 | target_class_string: "n03447721" 2314 | } 2315 | entry { 2316 | target_class: 911 2317 | target_class_string: "n03450230" 2318 | } 2319 | entry { 2320 | target_class: 227 2321 | target_class_string: "n03452741" 2322 | } 2323 | entry { 2324 | target_class: 684 2325 | target_class_string: "n03457902" 2326 | } 2327 | entry { 2328 | target_class: 725 2329 | target_class_string: "n03459775" 2330 | } 2331 | entry { 2332 | target_class: 703 2333 | target_class_string: "n03461385" 2334 | } 2335 | entry { 2336 | target_class: 517 2337 | target_class_string: "n03467068" 2338 | } 2339 | entry { 2340 | target_class: 581 2341 | target_class_string: "n03476684" 2342 | } 2343 | entry { 2344 | target_class: 895 2345 | target_class_string: "n03476991" 2346 | } 2347 | entry { 2348 | target_class: 249 2349 | target_class_string: "n03478589" 2350 | } 2351 | entry { 2352 | target_class: 375 2353 | target_class_string: "n03481172" 2354 | } 2355 | entry { 2356 | target_class: 840 2357 | target_class_string: "n03482405" 2358 | } 2359 | entry { 2360 | target_class: 505 2361 | target_class_string: "n03483316" 2362 | } 2363 | entry { 2364 | target_class: 551 2365 | target_class_string: "n03485407" 2366 | } 2367 | entry { 2368 | target_class: 750 2369 | target_class_string: "n03485794" 2370 | } 2371 | entry { 2372 | target_class: 573 2373 | target_class_string: "n03492542" 2374 | } 2375 | entry { 2376 | target_class: 350 2377 | target_class_string: "n03494278" 2378 | } 2379 | entry { 2380 | target_class: 344 2381 | target_class_string: "n03495258" 2382 | } 2383 | entry { 2384 | target_class: 554 2385 | target_class_string: "n03496892" 2386 | } 2387 | entry { 2388 | target_class: 369 2389 | target_class_string: "n03498962" 2390 | } 2391 | entry { 2392 | target_class: 787 2393 | target_class_string: "n03527444" 2394 | } 2395 | entry { 2396 | target_class: 696 2397 | target_class_string: "n03529860" 2398 | } 2399 | entry { 2400 | target_class: 730 2401 | target_class_string: "n03530642" 2402 | } 2403 | entry { 2404 | target_class: 562 2405 | target_class_string: "n03532672" 2406 | } 2407 | entry { 2408 | target_class: 802 2409 | target_class_string: "n03534580" 2410 | } 2411 | entry { 2412 | target_class: 924 2413 | target_class_string: "n03535780" 2414 | } 2415 | entry { 2416 | target_class: 293 2417 | target_class_string: "n03538406" 2418 | } 2419 | entry { 2420 | target_class: 525 2421 | target_class_string: "n03544143" 2422 | } 2423 | entry { 2424 | target_class: 980 2425 | target_class_string: "n03584254" 2426 | } 2427 | entry { 2428 | target_class: 659 2429 | target_class_string: "n03584829" 2430 | } 2431 | entry { 2432 | target_class: 592 2433 | target_class_string: "n03590841" 2434 | } 2435 | entry { 2436 | target_class: 748 2437 | target_class_string: "n03594734" 2438 | } 2439 | entry { 2440 | target_class: 269 2441 | target_class_string: "n03594945" 2442 | } 2443 | entry { 2444 | target_class: 961 2445 | target_class_string: "n03595614" 2446 | } 2447 | entry { 2448 | target_class: 963 2449 | target_class_string: "n03598930" 2450 | } 2451 | entry { 2452 | target_class: 294 2453 | target_class_string: "n03599486" 2454 | } 2455 | entry { 2456 | target_class: 560 2457 | target_class_string: "n03602883" 2458 | } 2459 | entry { 2460 | target_class: 770 2461 | target_class_string: "n03617480" 2462 | } 2463 | entry { 2464 | target_class: 773 2465 | target_class_string: "n03623198" 2466 | } 2467 | entry { 2468 | target_class: 582 2469 | target_class_string: "n03627232" 2470 | } 2471 | entry { 2472 | target_class: 918 2473 | target_class_string: "n03630383" 2474 | } 2475 | entry { 2476 | target_class: 892 2477 | target_class_string: "n03633091" 2478 | } 2479 | entry { 2480 | target_class: 814 2481 | target_class_string: "n03637318" 2482 | } 2483 | entry { 2484 | target_class: 228 2485 | target_class_string: "n03642806" 2486 | } 2487 | entry { 2488 | target_class: 374 2489 | target_class_string: "n03649909" 2490 | } 2491 | entry { 2492 | target_class: 988 2493 | target_class_string: "n03657121" 2494 | } 2495 | entry { 2496 | target_class: 371 2497 | target_class_string: "n03658185" 2498 | } 2499 | entry { 2500 | target_class: 687 2501 | target_class_string: "n03661043" 2502 | } 2503 | entry { 2504 | target_class: 238 2505 | target_class_string: "n03662601" 2506 | } 2507 | entry { 2508 | target_class: 546 2509 | target_class_string: "n03666591" 2510 | } 2511 | entry { 2512 | target_class: 270 2513 | target_class_string: "n03670208" 2514 | } 2515 | entry { 2516 | target_class: 244 2517 | target_class_string: "n03673027" 2518 | } 2519 | entry { 2520 | target_class: 867 2521 | target_class_string: "n03676483" 2522 | } 2523 | entry { 2524 | target_class: 973 2525 | target_class_string: "n03680355" 2526 | } 2527 | entry { 2528 | target_class: 894 2529 | target_class_string: "n03690938" 2530 | } 2531 | entry { 2532 | target_class: 508 2533 | target_class_string: "n03691459" 2534 | } 2535 | entry { 2536 | target_class: 536 2537 | target_class_string: "n03692522" 2538 | } 2539 | entry { 2540 | target_class: 697 2541 | target_class_string: "n03697007" 2542 | } 2543 | entry { 2544 | target_class: 532 2545 | target_class_string: "n03706229" 2546 | } 2547 | entry { 2548 | target_class: 818 2549 | target_class_string: "n03709823" 2550 | } 2551 | entry { 2552 | target_class: 917 2553 | target_class_string: "n03710193" 2554 | } 2555 | entry { 2556 | target_class: 782 2557 | target_class_string: "n03710637" 2558 | } 2559 | entry { 2560 | target_class: 977 2561 | target_class_string: "n03710721" 2562 | } 2563 | entry { 2564 | target_class: 763 2565 | target_class_string: "n03717622" 2566 | } 2567 | entry { 2568 | target_class: 338 2569 | target_class_string: "n03720891" 2570 | } 2571 | entry { 2572 | target_class: 339 2573 | target_class_string: "n03721384" 2574 | } 2575 | entry { 2576 | target_class: 781 2577 | target_class_string: "n03724870" 2578 | } 2579 | entry { 2580 | target_class: 984 2581 | target_class_string: "n03729826" 2582 | } 2583 | entry { 2584 | target_class: 598 2585 | target_class_string: "n03733131" 2586 | } 2587 | entry { 2588 | target_class: 922 2589 | target_class_string: "n03733281" 2590 | } 2591 | entry { 2592 | target_class: 946 2593 | target_class_string: "n03733805" 2594 | } 2595 | entry { 2596 | target_class: 302 2597 | target_class_string: "n03742115" 2598 | } 2599 | entry { 2600 | target_class: 717 2601 | target_class_string: "n03743016" 2602 | } 2603 | entry { 2604 | target_class: 509 2605 | target_class_string: "n03759954" 2606 | } 2607 | entry { 2608 | target_class: 661 2609 | target_class_string: "n03761084" 2610 | } 2611 | entry { 2612 | target_class: 866 2613 | target_class_string: "n03763968" 2614 | } 2615 | entry { 2616 | target_class: 875 2617 | target_class_string: "n03764736" 2618 | } 2619 | entry { 2620 | target_class: 920 2621 | target_class_string: "n03769881" 2622 | } 2623 | entry { 2624 | target_class: 880 2625 | target_class_string: "n03770439" 2626 | } 2627 | entry { 2628 | target_class: 271 2629 | target_class_string: "n03770679" 2630 | } 2631 | entry { 2632 | target_class: 251 2633 | target_class_string: "n03773504" 2634 | } 2635 | entry { 2636 | target_class: 871 2637 | target_class_string: "n03775071" 2638 | } 2639 | entry { 2640 | target_class: 829 2641 | target_class_string: "n03775546" 2642 | } 2643 | entry { 2644 | target_class: 290 2645 | target_class_string: "n03776460" 2646 | } 2647 | entry { 2648 | target_class: 272 2649 | target_class_string: "n03777568" 2650 | } 2651 | entry { 2652 | target_class: 764 2653 | target_class_string: "n03777754" 2654 | } 2655 | entry { 2656 | target_class: 686 2657 | target_class_string: "n03781244" 2658 | } 2659 | entry { 2660 | target_class: 869 2661 | target_class_string: "n03782006" 2662 | } 2663 | entry { 2664 | target_class: 277 2665 | target_class_string: "n03785016" 2666 | } 2667 | entry { 2668 | target_class: 824 2669 | target_class_string: "n03786901" 2670 | } 2671 | entry { 2672 | target_class: 854 2673 | target_class_string: "n03787032" 2674 | } 2675 | entry { 2676 | target_class: 691 2677 | target_class_string: "n03788195" 2678 | } 2679 | entry { 2680 | target_class: 852 2681 | target_class_string: "n03788365" 2682 | } 2683 | entry { 2684 | target_class: 260 2685 | target_class_string: "n03791053" 2686 | } 2687 | entry { 2688 | target_class: 255 2689 | target_class_string: "n03792782" 2690 | } 2691 | entry { 2692 | target_class: 728 2693 | target_class_string: "n03792972" 2694 | } 2695 | entry { 2696 | target_class: 511 2697 | target_class_string: "n03793489" 2698 | } 2699 | entry { 2700 | target_class: 599 2701 | target_class_string: "n03794056" 2702 | } 2703 | entry { 2704 | target_class: 284 2705 | target_class_string: "n03796401" 2706 | } 2707 | entry { 2708 | target_class: 588 2709 | target_class_string: "n03803284" 2710 | } 2711 | entry { 2712 | target_class: 585 2713 | target_class_string: "n03804744" 2714 | } 2715 | entry { 2716 | target_class: 595 2717 | target_class_string: "n03814639" 2718 | } 2719 | entry { 2720 | target_class: 755 2721 | target_class_string: "n03814906" 2722 | } 2723 | entry { 2724 | target_class: 915 2725 | target_class_string: "n03825788" 2726 | } 2727 | entry { 2728 | target_class: 552 2729 | target_class_string: "n03832673" 2730 | } 2731 | entry { 2732 | target_class: 699 2733 | target_class_string: "n03837869" 2734 | } 2735 | entry { 2736 | target_class: 354 2737 | target_class_string: "n03838899" 2738 | } 2739 | entry { 2740 | target_class: 351 2741 | target_class_string: "n03840681" 2742 | } 2743 | entry { 2744 | target_class: 520 2745 | target_class_string: "n03841143" 2746 | } 2747 | entry { 2748 | target_class: 513 2749 | target_class_string: "n03843555" 2750 | } 2751 | entry { 2752 | target_class: 333 2753 | target_class_string: "n03854065" 2754 | } 2755 | entry { 2756 | target_class: 870 2757 | target_class_string: "n03857828" 2758 | } 2759 | entry { 2760 | target_class: 937 2761 | target_class_string: "n03866082" 2762 | } 2763 | entry { 2764 | target_class: 295 2765 | target_class_string: "n03868242" 2766 | } 2767 | entry { 2768 | target_class: 506 2769 | target_class_string: "n03868863" 2770 | } 2771 | entry { 2772 | target_class: 921 2773 | target_class_string: "n03871628" 2774 | } 2775 | entry { 2776 | target_class: 826 2777 | target_class_string: "n03873416" 2778 | } 2779 | entry { 2780 | target_class: 564 2781 | target_class_string: "n03874293" 2782 | } 2783 | entry { 2784 | target_class: 584 2785 | target_class_string: "n03874599" 2786 | } 2787 | entry { 2788 | target_class: 504 2789 | target_class_string: "n03876231" 2790 | } 2791 | entry { 2792 | target_class: 759 2793 | target_class_string: "n03877472" 2794 | } 2795 | entry { 2796 | target_class: 685 2797 | target_class_string: "n03877845" 2798 | } 2799 | entry { 2800 | target_class: 352 2801 | target_class_string: "n03884397" 2802 | } 2803 | entry { 2804 | target_class: 877 2805 | target_class_string: "n03887697" 2806 | } 2807 | entry { 2808 | target_class: 942 2809 | target_class_string: "n03888257" 2810 | } 2811 | entry { 2812 | target_class: 994 2813 | target_class_string: "n03888605" 2814 | } 2815 | entry { 2816 | target_class: 306 2817 | target_class_string: "n03891251" 2818 | } 2819 | entry { 2820 | target_class: 527 2821 | target_class_string: "n03891332" 2822 | } 2823 | entry { 2824 | target_class: 257 2825 | target_class_string: "n03895866" 2826 | } 2827 | entry { 2828 | target_class: 679 2829 | target_class_string: "n03899768" 2830 | } 2831 | entry { 2832 | target_class: 843 2833 | target_class_string: "n03902125" 2834 | } 2835 | entry { 2836 | target_class: 732 2837 | target_class_string: "n03903868" 2838 | } 2839 | entry { 2840 | target_class: 842 2841 | target_class_string: "n03908618" 2842 | } 2843 | entry { 2844 | target_class: 850 2845 | target_class_string: "n03908714" 2846 | } 2847 | entry { 2848 | target_class: 883 2849 | target_class_string: "n03916031" 2850 | } 2851 | entry { 2852 | target_class: 783 2853 | target_class_string: "n03920288" 2854 | } 2855 | entry { 2856 | target_class: 789 2857 | target_class_string: "n03924679" 2858 | } 2859 | entry { 2860 | target_class: 575 2861 | target_class_string: "n03929660" 2862 | } 2863 | entry { 2864 | target_class: 926 2865 | target_class_string: "n03929855" 2866 | } 2867 | entry { 2868 | target_class: 722 2869 | target_class_string: "n03930313" 2870 | } 2871 | entry { 2872 | target_class: 281 2873 | target_class_string: "n03930630" 2874 | } 2875 | entry { 2876 | target_class: 596 2877 | target_class_string: "n03933933" 2878 | } 2879 | entry { 2880 | target_class: 931 2881 | target_class_string: "n03935335" 2882 | } 2883 | entry { 2884 | target_class: 901 2885 | target_class_string: "n03937543" 2886 | } 2887 | entry { 2888 | target_class: 888 2889 | target_class_string: "n03938244" 2890 | } 2891 | entry { 2892 | target_class: 841 2893 | target_class_string: "n03942813" 2894 | } 2895 | entry { 2896 | target_class: 565 2897 | target_class_string: "n03944341" 2898 | } 2899 | entry { 2900 | target_class: 245 2901 | target_class_string: "n03947888" 2902 | } 2903 | entry { 2904 | target_class: 983 2905 | target_class_string: "n03950228" 2906 | } 2907 | entry { 2908 | target_class: 372 2909 | target_class_string: "n03954731" 2910 | } 2911 | entry { 2912 | target_class: 693 2913 | target_class_string: "n03956157" 2914 | } 2915 | entry { 2916 | target_class: 964 2917 | target_class_string: "n03958227" 2918 | } 2919 | entry { 2920 | target_class: 731 2921 | target_class_string: "n03961711" 2922 | } 2923 | entry { 2924 | target_class: 381 2925 | target_class_string: "n03967562" 2926 | } 2927 | entry { 2928 | target_class: 378 2929 | target_class_string: "n03970156" 2930 | } 2931 | entry { 2932 | target_class: 857 2933 | target_class_string: "n03976467" 2934 | } 2935 | entry { 2936 | target_class: 923 2937 | target_class_string: "n03976657" 2938 | } 2939 | entry { 2940 | target_class: 285 2941 | target_class_string: "n03977966" 2942 | } 2943 | entry { 2944 | target_class: 855 2945 | target_class_string: "n03980874" 2946 | } 2947 | entry { 2948 | target_class: 314 2949 | target_class_string: "n03982430" 2950 | } 2951 | entry { 2952 | target_class: 788 2953 | target_class_string: "n03983396" 2954 | } 2955 | entry { 2956 | target_class: 838 2957 | target_class_string: "n03991062" 2958 | } 2959 | entry { 2960 | target_class: 566 2961 | target_class_string: "n03992509" 2962 | } 2963 | entry { 2964 | target_class: 373 2965 | target_class_string: "n03995372" 2966 | } 2967 | entry { 2968 | target_class: 769 2969 | target_class_string: "n03998194" 2970 | } 2971 | entry { 2972 | target_class: 556 2973 | target_class_string: "n04004767" 2974 | } 2975 | entry { 2976 | target_class: 702 2977 | target_class_string: "n04005630" 2978 | } 2979 | entry { 2980 | target_class: 542 2981 | target_class_string: "n04008634" 2982 | } 2983 | entry { 2984 | target_class: 534 2985 | target_class_string: "n04009552" 2986 | } 2987 | entry { 2988 | target_class: 572 2989 | target_class_string: "n04019541" 2990 | } 2991 | entry { 2992 | target_class: 846 2993 | target_class_string: "n04023962" 2994 | } 2995 | entry { 2996 | target_class: 939 2997 | target_class_string: "n04026417" 2998 | } 2999 | entry { 3000 | target_class: 862 3001 | target_class_string: "n04033901" 3002 | } 3003 | entry { 3004 | target_class: 976 3005 | target_class_string: "n04033995" 3006 | } 3007 | entry { 3008 | target_class: 273 3009 | target_class_string: "n04037443" 3010 | } 3011 | entry { 3012 | target_class: 860 3013 | target_class_string: "n04039381" 3014 | } 3015 | entry { 3016 | target_class: 571 3017 | target_class_string: "n04040759" 3018 | } 3019 | entry { 3020 | target_class: 863 3021 | target_class_string: "n04041544" 3022 | } 3023 | entry { 3024 | target_class: 537 3025 | target_class_string: "n04044716" 3026 | } 3027 | entry { 3028 | target_class: 927 3029 | target_class_string: "n04049303" 3030 | } 3031 | entry { 3032 | target_class: 286 3033 | target_class_string: "n04065272" 3034 | } 3035 | entry { 3036 | target_class: 570 3037 | target_class_string: "n04067472" 3038 | } 3039 | entry { 3040 | target_class: 965 3041 | target_class_string: "n04069434" 3042 | } 3043 | entry { 3044 | target_class: 668 3045 | target_class_string: "n04070727" 3046 | } 3047 | entry { 3048 | target_class: 578 3049 | target_class_string: "n04074963" 3050 | } 3051 | entry { 3052 | target_class: 694 3053 | target_class_string: "n04081281" 3054 | } 3055 | entry { 3056 | target_class: 219 3057 | target_class_string: "n04086273" 3058 | } 3059 | entry { 3060 | target_class: 541 3061 | target_class_string: "n04090263" 3062 | } 3063 | entry { 3064 | target_class: 310 3065 | target_class_string: "n04099969" 3066 | } 3067 | entry { 3068 | target_class: 663 3069 | target_class_string: "n04111531" 3070 | } 3071 | entry { 3072 | target_class: 997 3073 | target_class_string: "n04116512" 3074 | } 3075 | entry { 3076 | target_class: 876 3077 | target_class_string: "n04118538" 3078 | } 3079 | entry { 3080 | target_class: 519 3081 | target_class_string: "n04118776" 3082 | } 3083 | entry { 3084 | target_class: 760 3085 | target_class_string: "n04120489" 3086 | } 3087 | entry { 3088 | target_class: 753 3089 | target_class_string: "n04125021" 3090 | } 3091 | entry { 3092 | target_class: 586 3093 | target_class_string: "n04127249" 3094 | } 3095 | entry { 3096 | target_class: 952 3097 | target_class_string: "n04131690" 3098 | } 3099 | entry { 3100 | target_class: 751 3101 | target_class_string: "n04133789" 3102 | } 3103 | entry { 3104 | target_class: 938 3105 | target_class_string: "n04136333" 3106 | } 3107 | entry { 3108 | target_class: 355 3109 | target_class_string: "n04141076" 3110 | } 3111 | entry { 3112 | target_class: 809 3113 | target_class_string: "n04141327" 3114 | } 3115 | entry { 3116 | target_class: 521 3117 | target_class_string: "n04141975" 3118 | } 3119 | entry { 3120 | target_class: 962 3121 | target_class_string: "n04146614" 3122 | } 3123 | entry { 3124 | target_class: 221 3125 | target_class_string: "n04147183" 3126 | } 3127 | entry { 3128 | target_class: 729 3129 | target_class_string: "n04149813" 3130 | } 3131 | entry { 3132 | target_class: 510 3133 | target_class_string: "n04152593" 3134 | } 3135 | entry { 3136 | target_class: 587 3137 | target_class_string: "n04153751" 3138 | } 3139 | entry { 3140 | target_class: 379 3141 | target_class_string: "n04154565" 3142 | } 3143 | entry { 3144 | target_class: 589 3145 | target_class_string: "n04162706" 3146 | } 3147 | entry { 3148 | target_class: 559 3149 | target_class_string: "n04179913" 3150 | } 3151 | entry { 3152 | target_class: 800 3153 | target_class_string: "n04192698" 3154 | } 3155 | entry { 3156 | target_class: 709 3157 | target_class_string: "n04200800" 3158 | } 3159 | entry { 3160 | target_class: 832 3161 | target_class_string: "n04201297" 3162 | } 3163 | entry { 3164 | target_class: 950 3165 | target_class_string: "n04204238" 3166 | } 3167 | entry { 3168 | target_class: 259 3169 | target_class_string: "n04204347" 3170 | } 3171 | entry { 3172 | target_class: 380 3173 | target_class_string: "n04208210" 3174 | } 3175 | entry { 3176 | target_class: 868 3177 | target_class_string: "n04209133" 3178 | } 3179 | entry { 3180 | target_class: 747 3181 | target_class_string: "n04209239" 3182 | } 3183 | entry { 3184 | target_class: 590 3185 | target_class_string: "n04228054" 3186 | } 3187 | entry { 3188 | target_class: 776 3189 | target_class_string: "n04229816" 3190 | } 3191 | entry { 3192 | target_class: 943 3193 | target_class_string: "n04235860" 3194 | } 3195 | entry { 3196 | target_class: 549 3197 | target_class_string: "n04238763" 3198 | } 3199 | entry { 3200 | target_class: 726 3201 | target_class_string: "n04239074" 3202 | } 3203 | entry { 3204 | target_class: 557 3205 | target_class_string: "n04243546" 3206 | } 3207 | entry { 3208 | target_class: 507 3209 | target_class_string: "n04251144" 3210 | } 3211 | entry { 3212 | target_class: 288 3213 | target_class_string: "n04252077" 3214 | } 3215 | entry { 3216 | target_class: 278 3217 | target_class_string: "n04252225" 3218 | } 3219 | entry { 3220 | target_class: 960 3221 | target_class_string: "n04254120" 3222 | } 3223 | entry { 3224 | target_class: 222 3225 | target_class_string: "n04254680" 3226 | } 3227 | entry { 3228 | target_class: 986 3229 | target_class_string: "n04254777" 3230 | } 3231 | entry { 3232 | target_class: 577 3233 | target_class_string: "n04258138" 3234 | } 3235 | entry { 3236 | target_class: 925 3237 | target_class_string: "n04259630" 3238 | } 3239 | entry { 3240 | target_class: 822 3241 | target_class_string: "n04263257" 3242 | } 3243 | entry { 3244 | target_class: 858 3245 | target_class_string: "n04264628" 3246 | } 3247 | entry { 3248 | target_class: 515 3249 | target_class_string: "n04265275" 3250 | } 3251 | entry { 3252 | target_class: 234 3253 | target_class_string: "n04266014" 3254 | } 3255 | entry { 3256 | target_class: 676 3257 | target_class_string: "n04270147" 3258 | } 3259 | entry { 3260 | target_class: 237 3261 | target_class_string: "n04273569" 3262 | } 3263 | entry { 3264 | target_class: 600 3265 | target_class_string: "n04275548" 3266 | } 3267 | entry { 3268 | target_class: 775 3269 | target_class_string: "n04277352" 3270 | } 3271 | entry { 3272 | target_class: 274 3273 | target_class_string: "n04285008" 3274 | } 3275 | entry { 3276 | target_class: 593 3277 | target_class_string: "n04286575" 3278 | } 3279 | entry { 3280 | target_class: 804 3281 | target_class_string: "n04296562" 3282 | } 3283 | entry { 3284 | target_class: 263 3285 | target_class_string: "n04310018" 3286 | } 3287 | entry { 3288 | target_class: 680 3289 | target_class_string: "n04311004" 3290 | } 3291 | entry { 3292 | target_class: 340 3293 | target_class_string: "n04311174" 3294 | } 3295 | entry { 3296 | target_class: 530 3297 | target_class_string: "n04317175" 3298 | } 3299 | entry { 3300 | target_class: 998 3301 | target_class_string: "n04325704" 3302 | } 3303 | entry { 3304 | target_class: 724 3305 | target_class_string: "n04326547" 3306 | } 3307 | entry { 3308 | target_class: 528 3309 | target_class_string: "n04328186" 3310 | } 3311 | entry { 3312 | target_class: 516 3313 | target_class_string: "n04330267" 3314 | } 3315 | entry { 3316 | target_class: 514 3317 | target_class_string: "n04332243" 3318 | } 3319 | entry { 3320 | target_class: 287 3321 | target_class_string: "n04335435" 3322 | } 3323 | entry { 3324 | target_class: 957 3325 | target_class_string: "n04336792" 3326 | } 3327 | entry { 3328 | target_class: 311 3329 | target_class_string: "n04344873" 3330 | } 3331 | entry { 3332 | target_class: 692 3333 | target_class_string: "n04346328" 3334 | } 3335 | entry { 3336 | target_class: 247 3337 | target_class_string: "n04347754" 3338 | } 3339 | entry { 3340 | target_class: 794 3341 | target_class_string: "n04350905" 3342 | } 3343 | entry { 3344 | target_class: 526 3345 | target_class_string: "n04355338" 3346 | } 3347 | entry { 3348 | target_class: 574 3349 | target_class_string: "n04355933" 3350 | } 3351 | entry { 3352 | target_class: 535 3353 | target_class_string: "n04356056" 3354 | } 3355 | entry { 3356 | target_class: 810 3357 | target_class_string: "n04357314" 3358 | } 3359 | entry { 3360 | target_class: 681 3361 | target_class_string: "n04366367" 3362 | } 3363 | entry { 3364 | target_class: 828 3365 | target_class_string: "n04367480" 3366 | } 3367 | entry { 3368 | target_class: 837 3369 | target_class_string: "n04370456" 3370 | } 3371 | entry { 3372 | target_class: 945 3373 | target_class_string: "n04371430" 3374 | } 3375 | entry { 3376 | target_class: 569 3377 | target_class_string: "n04371774" 3378 | } 3379 | entry { 3380 | target_class: 561 3381 | target_class_string: "n04372370" 3382 | } 3383 | entry { 3384 | target_class: 531 3385 | target_class_string: "n04376876" 3386 | } 3387 | entry { 3388 | target_class: 304 3389 | target_class_string: "n04380533" 3390 | } 3391 | entry { 3392 | target_class: 250 3393 | target_class_string: "n04389033" 3394 | } 3395 | entry { 3396 | target_class: 978 3397 | target_class_string: "n04392985" 3398 | } 3399 | entry { 3400 | target_class: 675 3401 | target_class_string: "n04398044" 3402 | } 3403 | entry { 3404 | target_class: 786 3405 | target_class_string: "n04399382" 3406 | } 3407 | entry { 3408 | target_class: 944 3409 | target_class_string: "n04404412" 3410 | } 3411 | entry { 3412 | target_class: 970 3413 | target_class_string: "n04409515" 3414 | } 3415 | entry { 3416 | target_class: 989 3417 | target_class_string: "n04417672" 3418 | } 3419 | entry { 3420 | target_class: 903 3421 | target_class_string: "n04418357" 3422 | } 3423 | entry { 3424 | target_class: 758 3425 | target_class_string: "n04423845" 3426 | } 3427 | entry { 3428 | target_class: 555 3429 | target_class_string: "n04428191" 3430 | } 3431 | entry { 3432 | target_class: 308 3433 | target_class_string: "n04429376" 3434 | } 3435 | entry { 3436 | target_class: 780 3437 | target_class_string: "n04435653" 3438 | } 3439 | entry { 3440 | target_class: 664 3441 | target_class_string: "n04442312" 3442 | } 3443 | entry { 3444 | target_class: 710 3445 | target_class_string: "n04443257" 3446 | } 3447 | entry { 3448 | target_class: 312 3449 | target_class_string: "n04447861" 3450 | } 3451 | entry { 3452 | target_class: 594 3453 | target_class_string: "n04456115" 3454 | } 3455 | entry { 3456 | target_class: 700 3457 | target_class_string: "n04458633" 3458 | } 3459 | entry { 3460 | target_class: 282 3461 | target_class_string: "n04461696" 3462 | } 3463 | entry { 3464 | target_class: 711 3465 | target_class_string: "n04462240" 3466 | } 3467 | entry { 3468 | target_class: 289 3469 | target_class_string: "n04465501" 3470 | } 3471 | entry { 3472 | target_class: 283 3473 | target_class_string: "n04467665" 3474 | } 3475 | entry { 3476 | target_class: 766 3477 | target_class_string: "n04476259" 3478 | } 3479 | entry { 3480 | target_class: 825 3481 | target_class_string: "n04479046" 3482 | } 3483 | entry { 3484 | target_class: 291 3485 | target_class_string: "n04482393" 3486 | } 3487 | entry { 3488 | target_class: 242 3489 | target_class_string: "n04483307" 3490 | } 3491 | entry { 3492 | target_class: 597 3493 | target_class_string: "n04485082" 3494 | } 3495 | entry { 3496 | target_class: 678 3497 | target_class_string: "n04486054" 3498 | } 3499 | entry { 3500 | target_class: 882 3501 | target_class_string: "n04487081" 3502 | } 3503 | entry { 3504 | target_class: 349 3505 | target_class_string: "n04487394" 3506 | } 3507 | entry { 3508 | target_class: 765 3509 | target_class_string: "n04493381" 3510 | } 3511 | entry { 3512 | target_class: 727 3513 | target_class_string: "n04501370" 3514 | } 3515 | entry { 3516 | target_class: 544 3517 | target_class_string: "n04505470" 3518 | } 3519 | entry { 3520 | target_class: 220 3521 | target_class_string: "n04507155" 3522 | } 3523 | entry { 3524 | target_class: 292 3525 | target_class_string: "n04509417" 3526 | } 3527 | entry { 3528 | target_class: 334 3529 | target_class_string: "n04515003" 3530 | } 3531 | entry { 3532 | target_class: 666 3533 | target_class_string: "n04517823" 3534 | } 3535 | entry { 3536 | target_class: 874 3537 | target_class_string: "n04522168" 3538 | } 3539 | entry { 3540 | target_class: 990 3541 | target_class_string: "n04523525" 3542 | } 3543 | entry { 3544 | target_class: 969 3545 | target_class_string: "n04525038" 3546 | } 3547 | entry { 3548 | target_class: 558 3549 | target_class_string: "n04525305" 3550 | } 3551 | entry { 3552 | target_class: 790 3553 | target_class_string: "n04532106" 3554 | } 3555 | entry { 3556 | target_class: 682 3557 | target_class_string: "n04532670" 3558 | } 3559 | entry { 3560 | target_class: 343 3561 | target_class_string: "n04536866" 3562 | } 3563 | entry { 3564 | target_class: 936 3565 | target_class_string: "n04540053" 3566 | } 3567 | entry { 3568 | target_class: 665 3569 | target_class_string: "n04542943" 3570 | } 3571 | entry { 3572 | target_class: 524 3573 | target_class_string: "n04548280" 3574 | } 3575 | entry { 3576 | target_class: 928 3577 | target_class_string: "n04548362" 3578 | } 3579 | entry { 3580 | target_class: 317 3581 | target_class_string: "n04550184" 3582 | } 3583 | entry { 3584 | target_class: 231 3585 | target_class_string: "n04552348" 3586 | } 3587 | entry { 3588 | target_class: 906 3589 | target_class_string: "n04553703" 3590 | } 3591 | entry { 3592 | target_class: 669 3593 | target_class_string: "n04554684" 3594 | } 3595 | entry { 3596 | target_class: 958 3597 | target_class_string: "n04557648" 3598 | } 3599 | entry { 3600 | target_class: 819 3601 | target_class_string: "n04560804" 3602 | } 3603 | entry { 3604 | target_class: 795 3605 | target_class_string: "n04562935" 3606 | } 3607 | entry { 3608 | target_class: 772 3609 | target_class_string: "n04579145" 3610 | } 3611 | entry { 3612 | target_class: 502 3613 | target_class_string: "n04579432" 3614 | } 3615 | entry { 3616 | target_class: 899 3617 | target_class_string: "n04584207" 3618 | } 3619 | entry { 3620 | target_class: 912 3621 | target_class_string: "n04589890" 3622 | } 3623 | entry { 3624 | target_class: 904 3625 | target_class_string: "n04590129" 3626 | } 3627 | entry { 3628 | target_class: 935 3629 | target_class_string: "n04591157" 3630 | } 3631 | entry { 3632 | target_class: 831 3633 | target_class_string: "n04591713" 3634 | } 3635 | entry { 3636 | target_class: 503 3637 | target_class_string: "n04592741" 3638 | } 3639 | entry { 3640 | target_class: 672 3641 | target_class_string: "n04596742" 3642 | } 3643 | entry { 3644 | target_class: 951 3645 | target_class_string: "n04597913" 3646 | } 3647 | entry { 3648 | target_class: 815 3649 | target_class_string: "n04599235" 3650 | } 3651 | entry { 3652 | target_class: 723 3653 | target_class_string: "n04604644" 3654 | } 3655 | entry { 3656 | target_class: 248 3657 | target_class_string: "n04606251" 3658 | } 3659 | entry { 3660 | target_class: 240 3661 | target_class_string: "n04612504" 3662 | } 3663 | entry { 3664 | target_class: 714 3665 | target_class_string: "n04613696" 3666 | } 3667 | entry { 3668 | target_class: 553 3669 | target_class_string: "n06359193" 3670 | } 3671 | entry { 3672 | target_class: 930 3673 | target_class_string: "n06596364" 3674 | } 3675 | entry { 3676 | target_class: 791 3677 | target_class_string: "n06785654" 3678 | } 3679 | entry { 3680 | target_class: 932 3681 | target_class_string: "n06794110" 3682 | } 3683 | entry { 3684 | target_class: 861 3685 | target_class_string: "n06874185" 3686 | } 3687 | entry { 3688 | target_class: 774 3689 | target_class_string: "n07248320" 3690 | } 3691 | entry { 3692 | target_class: 803 3693 | target_class_string: "n07565083" 3694 | } 3695 | entry { 3696 | target_class: 754 3697 | target_class_string: "n07579787" 3698 | } 3699 | entry { 3700 | target_class: 813 3701 | target_class_string: "n07583066" 3702 | } 3703 | entry { 3704 | target_class: 844 3705 | target_class_string: "n07584110" 3706 | } 3707 | entry { 3708 | target_class: 771 3709 | target_class_string: "n07590611" 3710 | } 3711 | entry { 3712 | target_class: 793 3713 | target_class_string: "n07613480" 3714 | } 3715 | entry { 3716 | target_class: 974 3717 | target_class_string: "n07614500" 3718 | } 3719 | entry { 3720 | target_class: 968 3721 | target_class_string: "n07615774" 3722 | } 3723 | entry { 3724 | target_class: 873 3725 | target_class_string: "n07684084" 3726 | } 3727 | entry { 3728 | target_class: 768 3729 | target_class_string: "n07693725" 3730 | } 3731 | entry { 3732 | target_class: 975 3733 | target_class_string: "n07695742" 3734 | } 3735 | entry { 3736 | target_class: 993 3737 | target_class_string: "n07697313" 3738 | } 3739 | entry { 3740 | target_class: 885 3741 | target_class_string: "n07697537" 3742 | } 3743 | entry { 3744 | target_class: 734 3745 | target_class_string: "n07711569" 3746 | } 3747 | entry { 3748 | target_class: 736 3749 | target_class_string: "n07714571" 3750 | } 3751 | entry { 3752 | target_class: 737 3753 | target_class_string: "n07714990" 3754 | } 3755 | entry { 3756 | target_class: 738 3757 | target_class_string: "n07715103" 3758 | } 3759 | entry { 3760 | target_class: 739 3761 | target_class_string: "n07716358" 3762 | } 3763 | entry { 3764 | target_class: 740 3765 | target_class_string: "n07716906" 3766 | } 3767 | entry { 3768 | target_class: 741 3769 | target_class_string: "n07717410" 3770 | } 3771 | entry { 3772 | target_class: 742 3773 | target_class_string: "n07717556" 3774 | } 3775 | entry { 3776 | target_class: 743 3777 | target_class_string: "n07718472" 3778 | } 3779 | entry { 3780 | target_class: 744 3781 | target_class_string: "n07718747" 3782 | } 3783 | entry { 3784 | target_class: 735 3785 | target_class_string: "n07720875" 3786 | } 3787 | entry { 3788 | target_class: 745 3789 | target_class_string: "n07730033" 3790 | } 3791 | entry { 3792 | target_class: 746 3793 | target_class_string: "n07734744" 3794 | } 3795 | entry { 3796 | target_class: 318 3797 | target_class_string: "n07742313" 3798 | } 3799 | entry { 3800 | target_class: 229 3801 | target_class_string: "n07745940" 3802 | } 3803 | entry { 3804 | target_class: 319 3805 | target_class_string: "n07747607" 3806 | } 3807 | entry { 3808 | target_class: 320 3809 | target_class_string: "n07749582" 3810 | } 3811 | entry { 3812 | target_class: 321 3813 | target_class_string: "n07753113" 3814 | } 3815 | entry { 3816 | target_class: 322 3817 | target_class_string: "n07753275" 3818 | } 3819 | entry { 3820 | target_class: 323 3821 | target_class_string: "n07753592" 3822 | } 3823 | entry { 3824 | target_class: 324 3825 | target_class_string: "n07754684" 3826 | } 3827 | entry { 3828 | target_class: 325 3829 | target_class_string: "n07760859" 3830 | } 3831 | entry { 3832 | target_class: 326 3833 | target_class_string: "n07768694" 3834 | } 3835 | entry { 3836 | target_class: 816 3837 | target_class_string: "n07802026" 3838 | } 3839 | entry { 3840 | target_class: 999 3841 | target_class_string: "n07831146" 3842 | } 3843 | entry { 3844 | target_class: 953 3845 | target_class_string: "n07836838" 3846 | } 3847 | entry { 3848 | target_class: 864 3849 | target_class_string: "n07860988" 3850 | } 3851 | entry { 3852 | target_class: 806 3853 | target_class_string: "n07871810" 3854 | } 3855 | entry { 3856 | target_class: 948 3857 | target_class_string: "n07873807" 3858 | } 3859 | entry { 3860 | target_class: 830 3861 | target_class_string: "n07875152" 3862 | } 3863 | entry { 3864 | target_class: 900 3865 | target_class_string: "n07880968" 3866 | } 3867 | entry { 3868 | target_class: 798 3869 | target_class_string: "n07892512" 3870 | } 3871 | entry { 3872 | target_class: 947 3873 | target_class_string: "n07920052" 3874 | } 3875 | entry { 3876 | target_class: 859 3877 | target_class_string: "n07930864" 3878 | } 3879 | entry { 3880 | target_class: 823 3881 | target_class_string: "n07932039" 3882 | } 3883 | entry { 3884 | target_class: 361 3885 | target_class_string: "n09193705" 3886 | } 3887 | entry { 3888 | target_class: 992 3889 | target_class_string: "n09229709" 3890 | } 3891 | entry { 3892 | target_class: 359 3893 | target_class_string: "n09246464" 3894 | } 3895 | entry { 3896 | target_class: 365 3897 | target_class_string: "n09256479" 3898 | } 3899 | entry { 3900 | target_class: 368 3901 | target_class_string: "n09288635" 3902 | } 3903 | entry { 3904 | target_class: 366 3905 | target_class_string: "n09332890" 3906 | } 3907 | entry { 3908 | target_class: 363 3909 | target_class_string: "n09399592" 3910 | } 3911 | entry { 3912 | target_class: 364 3913 | target_class_string: "n09421951" 3914 | } 3915 | entry { 3916 | target_class: 367 3917 | target_class_string: "n09428293" 3918 | } 3919 | entry { 3920 | target_class: 360 3921 | target_class_string: "n09468604" 3922 | } 3923 | entry { 3924 | target_class: 362 3925 | target_class_string: "n09472597" 3926 | } 3927 | entry { 3928 | target_class: 954 3929 | target_class_string: "n09835506" 3930 | } 3931 | entry { 3932 | target_class: 848 3933 | target_class_string: "n10148035" 3934 | } 3935 | entry { 3936 | target_class: 982 3937 | target_class_string: "n10565667" 3938 | } 3939 | entry { 3940 | target_class: 330 3941 | target_class_string: "n11879895" 3942 | } 3943 | entry { 3944 | target_class: 357 3945 | target_class_string: "n11939491" 3946 | } 3947 | entry { 3948 | target_class: 358 3949 | target_class_string: "n12057211" 3950 | } 3951 | entry { 3952 | target_class: 331 3953 | target_class_string: "n12144580" 3954 | } 3955 | entry { 3956 | target_class: 327 3957 | target_class_string: "n12267677" 3958 | } 3959 | entry { 3960 | target_class: 328 3961 | target_class_string: "n12620546" 3962 | } 3963 | entry { 3964 | target_class: 332 3965 | target_class_string: "n12768682" 3966 | } 3967 | entry { 3968 | target_class: 886 3969 | target_class_string: "n12985857" 3970 | } 3971 | entry { 3972 | target_class: 913 3973 | target_class_string: "n12998815" 3974 | } 3975 | entry { 3976 | target_class: 956 3977 | target_class_string: "n13037406" 3978 | } 3979 | entry { 3980 | target_class: 893 3981 | target_class_string: "n13040303" 3982 | } 3983 | entry { 3984 | target_class: 878 3985 | target_class_string: "n13044778" 3986 | } 3987 | entry { 3988 | target_class: 812 3989 | target_class_string: "n13052670" 3990 | } 3991 | entry { 3992 | target_class: 981 3993 | target_class_string: "n13054560" 3994 | } 3995 | entry { 3996 | target_class: 329 3997 | target_class_string: "n13133613" 3998 | } 3999 | entry { 4000 | target_class: 889 4001 | target_class_string: "n15075141" 4002 | } 4003 | -------------------------------------------------------------------------------- /image_classification_service/imagenet/node_lookup.py: -------------------------------------------------------------------------------- 1 | # Copyright 2015 The TensorFlow Authors. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | # ============================================================================== 15 | 16 | # NOTE: This file was altered from the original classify_image.py Tensorflow Imagenet Tutorial 17 | 18 | import logging 19 | import re 20 | from pathlib import Path 21 | 22 | import tensorflow as tf 23 | 24 | logger = logging.getLogger(__name__) 25 | 26 | AGENT_DIRECTORY = Path(__file__).parent 27 | 28 | 29 | class NodeLookup(object): 30 | """Converts integer node ID's to human readable labels.""" 31 | 32 | def __init__(self, label_lookup_path=None, uid_lookup_path=None): 33 | 34 | model_directory = AGENT_DIRECTORY.joinpath('model_data') 35 | 36 | label_lookup_path = str(model_directory.joinpath('imagenet_2012_challenge_label_map_proto.pbtxt')) 37 | if not tf.gfile.Exists(label_lookup_path): 38 | tf.logging.fatal('Missing Label file %s', label_lookup_path) 39 | 40 | uid_lookup_path = str(model_directory.joinpath('imagenet_synset_to_human_label_map.txt')) 41 | if not tf.gfile.Exists(uid_lookup_path): 42 | tf.logging.fatal('Missing UID Lookup file %s', uid_lookup_path) 43 | 44 | # Loads mapping from string UID to human-readable string 45 | proto_as_ascii_lines = tf.gfile.GFile(uid_lookup_path).readlines() 46 | uid_to_human = {} 47 | p = re.compile(r'[n\d]*[ \S,]*') 48 | for line in proto_as_ascii_lines: 49 | parsed_items = p.findall(line) 50 | uid = parsed_items[0] 51 | human_string = parsed_items[2] 52 | uid_to_human[uid] = human_string 53 | 54 | # Loads mapping from string UID to integer node ID. 55 | node_id_to_uid = {} 56 | proto_as_ascii = tf.gfile.GFile(label_lookup_path).readlines() 57 | target_class = '' 58 | for line in proto_as_ascii: 59 | if line.startswith(' target_class:'): 60 | target_class = int(line.split(': ')[1]) 61 | if line.startswith(' target_class_string:'): 62 | target_class_string = line.split(': ')[1] 63 | node_id_to_uid[target_class] = target_class_string[1:-2] 64 | 65 | # Loads the final mapping of integer node ID to human-readable string 66 | self.node_id_to_name = {} 67 | for key, val in node_id_to_uid.items(): 68 | if val not in uid_to_human: 69 | tf.logging.fatal('Failed to locate: %s', val) 70 | name = uid_to_human[val] 71 | self.node_id_to_name[key] = name 72 | 73 | def id_to_string(self, node_id): 74 | if node_id not in self.node_id_to_name: 75 | return '' 76 | return self.node_id_to_name[node_id] 77 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | aiohttp==3.4.4 2 | jsonrpcclient==2.5.2 3 | jsonrpcserver==3.5.6 4 | requests==2.20.0 5 | tensorflow==1.3.0 6 | -------------------------------------------------------------------------------- /scripts/build-docker: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import pathlib 4 | import subprocess 5 | 6 | 7 | def main(): 8 | dockerfile_path = pathlib.Path(__file__).absolute().parent.parent 9 | subprocess.call(["docker", "build", ".", "-t", "singularitynet/example-service:latest"], cwd=dockerfile_path) 10 | 11 | 12 | if __name__ == "__main__": 13 | main() 14 | -------------------------------------------------------------------------------- /scripts/run-snet-service: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import pathlib 4 | import subprocess 5 | import signal 6 | import time 7 | 8 | 9 | def main(): 10 | def handle_signal(signum, frame): 11 | snetd_p.send_signal(signum) 12 | service_p.send_signal(signum) 13 | snetd_p.wait() 14 | service_p.wait() 15 | exit(0) 16 | 17 | signal.signal(signal.SIGTERM, handle_signal) 18 | signal.signal(signal.SIGINT, handle_signal) 19 | 20 | root_path = pathlib.Path(__file__).absolute().parent.parent 21 | snetd_p = start_snetd(root_path) 22 | service_p = start_service(root_path) 23 | 24 | while True: 25 | if snetd_p.poll() is not None: 26 | snetd_p = start_snetd(root_path) 27 | if service_p.poll() is not None: 28 | service_p = start_service(root_path) 29 | time.sleep(5) 30 | 31 | 32 | def start_snetd(cwd): 33 | return subprocess.Popen(["./snetd-linux-amd64"], cwd=cwd) 34 | 35 | 36 | def start_service(cwd): 37 | return subprocess.Popen(["python3.6", "image_classification_service"], cwd=cwd) 38 | 39 | 40 | if __name__ == "__main__": 41 | main() 42 | -------------------------------------------------------------------------------- /scripts/test-call: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import jsonrpcclient 4 | from pathlib import Path 5 | import sys 6 | sys.path.append(str(Path(__file__).absolute().parent.parent)) 7 | from image_classification_service import configuration as config 8 | 9 | 10 | bucket_image_64 = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxAQEBUQEhAQFRUQEg8SEA8VEBUQFRAPFRUWFhUVFRUYHSggGBolGxUVITEhJSkr' \ 11 | + 'Li4uFx8zODMtNygtLisBCgoKDg0OFxAQGi0lHR0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t' \ 12 | + 'LS0tLf/AABEIAOEA4QMBEQACEQEDEQH/xAAbAAEAAgMBAQAAAAAAAAAAAAAAAgMBBQYEB//EAEEQAAIBAgIHBAgEBAMJAAAAAAAB' \ 13 | + 'AgMRBCEFBhIxQVFhInGBkRMyUmKhscHRFEJykkOC4fAHU/EVFhcjM1RjotL/xAAaAQEBAQEBAQEAAAAAAAAAAAAAAQIDBQQG/8QA' \ 14 | + 'LBEBAQABAwMEAQMDBQAAAAAAAAECAwQREiExBRNBUSIyYaEVcZEjUoGx8P/aAAwDAQACEQMRAD8A+4gAAAAAAAAAAAAAAAAAAAAA' \ 15 | + 'AAAAAAAAAAAAAAAAAAAAAAAGGwK54iC3zgu+SQZuUnyqlpGgt9an++P3Ce5h9xB6Xw6/jU/3Icp72n9xH/bOG/zqfmOU97T+4ktL' \ 16 | + 'Yd/xqf7kOV97D7iyOPovdVp/vQX3MftdGtF7pRfc0w1zEwoAAAAAAAAAAAAAAAAAGB4cTpahT9apG/Jdp/AcuWWthj5rUYvXGhD1' \ 17 | + 'Yyl1bUUTl8+e+wx8NHjNfJ7o7Ee5bT+Ji6kj5M/Uvpp8RrhiJfxZ+D2fkZurHy5eoZ35a+tpytPfOT75NmLquN3Wd+Xnljqj4k9y' \ 18 | + 'se7lUPxM+bJ11OvI9NLmx106qyq0uZeunVU44qfTyLNStddWLGy5R8mX3KvuVNaSa/L5SaNTUX37HqpadnHdOqu6dy+5HWbrKfNb' \ 19 | + 'DDa211urS/njf7l647Y7/P7bWhrtUXrRpyXFrJ/34GuX0Y+oWeY22E1woT9aMo9cpL7l5fRhvtPLy3GF0pQq+pUi3yvZ+TK+nHVw' \ 20 | + 'y8V7A6AAAAAAAAACutWjCLlKSilvbdglsk5rntJa1Rjf0aT9+WS8FvZOXx6m8k/S43S+tk5ZObl03R8kc8tSR5etv7e3LncRpepP' \ 21 | + 'jZHK6tvh5+e5zyeV1JPe2c7bXHqt81mMQ1IsiiNyJpBuRJIKzYqslVkDJRkDDRSwsE4EgSAVJTZeqi+li5R4m5m3jqWN5ozWatTy' \ 22 | + 'VR29mXaXk/odJlK+zS3mePy6zR2tlOeVWOy/bXaj4rejXL0dPeY5fqdDSqRklKLTT3NO6ZX1yy94mFAAAAB4tK6Rhh4bUs2/Vjxk' \ 23 | + '/sHPV1ZpzmuC0zpac71Kksluj+WPcjNvDyNfXt/LKuN0hpOVR5OyPmz1LfDydTWyz/s8KObinFERZFBqRZFB0iaDcSRVZQVkqpAZ' \ 24 | + 'KoBkoACgACAAAB6cNinF2e7mdMc/tvDPh0miNLVKDvB3i/Wpt5SXTk+p1eho6+WHjw77AYyFamqkHk+HGL4p9TT1sM5nOY9IbAAA' \ 25 | + 'DgNN4x1a0pcItxiuUVkZeTr59WdcbrLXe0ocErvx3HDWvw8nd5flMWlSOD5OVkYkE0inCaDcTQbiSDSSCsoqshWSjIVlFADJQAAA' \ 26 | + 'AAoBGANto6V4dzt4HfC9n06V5xdVqXi3GtKlwnFyt70ePk/gbj0dln+VxdqV6QAAwwPmld9uX6n8zLxc/wBVaHWLCOVqqz2Vsz7u' \ 27 | + 'DOOrjz3fBu9Pn840iifM+LhJILwykGuEkF4SQaSTCs3Cs3KMoKyVWbgCjJVZuAAFAIBWQAGYQcnZK7e5Fk5JLe0bmhS2IqPLe+b4' \ 28 | + 'n0YziPqxnTOG31OntY1JflhUb8rfUsvd9uynOdr6GaeoAAAHz3WvASoVnNLsVM4vk+MSeHj7zTuGfVPFamlXUvqh5fNMpWuxmiE8' \ 29 | + '6dl7j3fyv6Hz56PPeOGe3+cf8NVUpOLtJNPk1Y+e42eXzXGztUSIAZuFZuFLgSTKrNwrNyqzcDJeVZuUAMlAAAuBko9NHBSlv7K6' \ 30 | + '7/I3MLXTHTte6nCFNcube9naSYusmOEavHaYTexTzu7bS+S5kuXPhjrud4xfSNQ9Ayw1L0tVWqVUuy98Ib7Pq978DWM4e5tdH28O' \ 31 | + '7qjT6gAAApxeGhVg6c4qUZb0/wC8mGc8JlOK+eaf1Vq4dupSvUp78vXguq4rqjnZZ4eLuNlnp/lh3jS0cY1vLMvt8uOpXpvGas0p' \ 32 | + 'Lz/0LZK6czKd3kq6JhL1W49PWXxzOWWjjfDnlt8b4eKromot2zLudvgzldDKeHHLQyjy1MPOO+El4HO4ZTzHO45TzFW0ZY5EwvLK' \ 33 | + 'YXlJMKkmGmUUZKrJRkBcqrIUpPdF+RqY2rxaujgpvku9m5p5NTCr4YCK9aXgsjc0p8tTTnzU51qNL2V14/c1+OK9WGLWYzWOK9RN' \ 34 | + '9dyMXV+mbq2+I8GDo4vSFRUqcXLaf6YR6tmPyya09DPVvEfVtUNRaWCtVqtVay3St2Kb9xPj1fwO+OPD2dts8dLve9dgbfaAAAAA' \ 35 | + 'Bhq+QHznTujYbcuzZpvNZXMWPJ3Whjzzw0FTDOLyf0Jw864WeF2D9NUqRpRW1KbtFO2fiWWtYdeWUxnmul/3XxKhtP0V0rumpv5t' \ 36 | + 'WNd3oTZanHPZop4iKbjJ7Mou0oyi04vk7GeY+TLKS8XtUJOnLe6T77fVDtWfxv0rlg6T/hx8GvoydGN+Gbp4X4QejqXsyXc2S6WH' \ 37 | + '0ntYfSD0bS9/zZn2cE9rBB4Cnzl5/wBB7OKe3ix+Dpe1Lz/oPaxTow+2fw9Dm/Me3gvTgbGHX+rL06cT/THXw8eEfmPwh16cQlpW' \ 38 | + 'jHdbwRfcxie/hPDz1dPxW5Nmbqxn378R4q2sEuCS78zN1anuZ14aukq89zfgrE6sqcW+arhhJzzlJLx2n8CdNaxwjY4HRlNO7W1+' \ 39 | + 'rd5I1MY+jTwj6XqHhO05WSUI2StazfLwud8Y9jbY8R2xp9QAAAAAAAByms1Dtt81czXybnHlyWKgHlZx7dUpxjio34xmovlJoR12' \ 40 | + 'Vk1py7v0hp7jgdddF1FV/FRjeEk4VWt8WvVk1y4XOWU4vLyPUtC3jUx/5cVV0nTU3G0nsuzkkmr9M8znbHk3BNY+m+L8mZ6oxeyf' \ 41 | + '4te38y9X7s9V+0ZYz3/ix1funVkreNXtrzJz+7POorljF7a8xynGorli17a8yL0ZqpYqPtfML7eSqWJjzfkRqaVQ9OuUvgg3NNly' \ 42 | + 'V7KL8X9jcxi8RJdy8i8SKupRvnfeWNeXrpQK1G1wUBH1aUfStS7KEo8XsvwzR2j2dGcYulK6gAAAAAAAGl1kpXipcrolcdac4uJx' \ 43 | + 'sM2R5GpGuldO6bTWafJh895l5jf6L1nltRhWtZ5elW9Pg5fcSvQ0N/eZjqf5dWlFx2Wk4yWaeakmbep2sfK9dtVPwsvS0l/ypPL/' \ 44 | + 'AMbfB/RnzamHDwt9tbpXrx/Tf4crFWODzbeXogWOVZcCpMlM6Rmx0map0yNzJBwDXKLiVeWNkcrynShdmse9S1ZTjmdWeV+zcWKu' \ 45 | + 'oQaQxnZqPZCJXad22wECx9ejHdatVLVUuacfhf6HSeXr4eHWmmwAAAAAAADx6Xp7VKXTMVnOcxwWOhmZeTqzu1NVB8mTzzRHKt/q' \ 46 | + '3p30dqNV9jdCb/I+T6fIsr0NnvOn8M/DrqtONSLpzSlGSs4vNNM3e717JlOL4r5ZrZqxLCS24XlRk+zLe4P2ZfRny6mnw/Ob3ZXQ' \ 47 | + 'vVj+m/w51HJ59WRYjFjNioqnAljcqqUTLpKg0GpUWiryspqyOuMS1ZSiWEWRWaJle8bxeqKOjT10Vcjtj3brRsc78s/I1i9DRjpN' \ 48 | + 'AVO3CXvr4v8AqXGvR0/Dujo2AAAAAAAARqw2otc00BwGk6dm+hl5evj3aWsg+HJ5ZkcqpkiMV0eren9m1Gs+zup1G/V92T5dTUye' \ 49 | + 'ls95x+Gfj4rqa0Yzi4TSlGSs4vNNGr3evZMpxfD5xrTqrLDt1aV5Ut7W+VLv5rqfNnp8d4/P730+6f56ffH/AKcucXlpKReU4ZNI' \ 50 | + 'rnEzY3KqaI2wo3yEnKrZRtY7xEopIvDUTptN9UZuPLeL0QefmbbnPL24ZB3wjpNB4dTlsvds1JS/TGLb+hqPS0I2eiE1GHfH5oYe' \ 51 | + 'H26c7O/OjYAAAAAAAAA43WCjapJdb+eZmvh3OLmcQg83J46gcclMjLnVTDLf6C1gdO1Ks24boz3uHR818izJ6O033R+Gp4+3Vqom' \ 52 | + 'uDTW/emmbe3LLOzkNY9UFO9XDJJ75Udyf6OT6HHPT+Y8nd+mzLnPS8/ThatOUW4yTTi7OLVmn1R89nDw8sbjeL5RUhyzwncqcITj' \ 53 | + 'yHDUqdKnbM3jjw0lNXRpVdN8GaIzh09pkbx8vXDj3FdI2OFW4Pr046LRTtRrz5whRj+qpLP/ANYsvPavQ0vFbnA07OCW/aj80akf' \ 54 | + 'bjOI7c2oAAAAAAAAA53Welmpc1byJXz7idnG4qJHk5x4agcMlEiVzqqRlmq2GWx0RpueH7L7VPjDjHrF8O4sy4fVtt7lo9r3x/8A' \ 55 | + 'eHX4TGwqx26crrjwcXya4M3Ly9/S1sNXHqwrx6Y0PQxS7atNerVjlJd/NGcsJk57ja6evPynf7cFprV2vhrtrbhwqxzVveX5T58s' \ 56 | + 'Li8HcbHU0e/mfbUJmI+PhJ3NeGWVOxZViamjcrcqFWPFGotidGpffv8AmWxrHJ6oR3+BHaYvbTqpfcza+rGyOj1cTqUllaPpJz/U' \ 57 | + '7KMX3JJ+bNYd3o7Wc48us0NQ2qyfCF5Pv3L++h1j7XTFQAAAAAAAAAavWGlelf2X8H/aJXPVnOLhcZEjyNSNbUQfNk88kRyqqSIz' \ 58 | + 'VciM1XIjFZw2KqUpbcJOL+DXJriizsunrZ6WXVheK6fR2sVOpaNS0Jc/ySffwNzLl7u29Swz7Z9r/DcqbXVPxTRXp9q0ukNXMNWb' \ 59 | + 'lFeim+MV2W+sfsYuE8vh1/T9LU7ztf2c7pDVvEUs9j0kfah2suq3ozca8nW9P1dPxOZ+zR1cO1/8vJnO4/T4rjZ5UNNGfDLO0WZN' \ 60 | + 'cl0amZ2WxqpL+2Lk6zLjw6PQur1as1OrFwp79lq0p+HBFmNr0tvtM871Z9p9O2pUowiopJJKySO0nD2ZJJxHS6Hwvo6d2u1PN9Fw' \ 61 | + 'Roe8AAAAAAAAAAox1PapyXuvzWYS+Hz7HQzMvJ1se7VVUHx5PNNEc7FUkRiqpEYquRGaqkg51XJBHrwOlq1HKMrx9iWcfDl4FmVj' \ 62 | + '69Deauj+m9vqt/hNY6M8pp03z9aPnvRrqj2NH1LTy7Zdr/DbUayktqE1Jc07mnoY545TnG8o4mjTqf8AUpQl1az8ycSs56OGf6py' \ 63 | + '1tbVvCT3bcPHaXxM3CPkz9N0cvHZ4p6l0nurtfyoz7T576Tj8ZUhqRS415PuSRPaJ6Tj85VtMBq5hKLUlHaks1KT2rPotyNTTkfX' \ 64 | + 'pbHS07zJ3bb06TUVvbSS4tvodH19o3+i9FbHbqWcuEeEPuyq2oQAAAAAAAAAAAHCaYo7M5Lk2jLztxj3aGsg8/J5ZkcqokRiqZkY' \ 65 | + 'quQYquRGKrkGVbCosKzTqyi7xk4vmnYOuOeWN/G8NhQ1gxMPzqS96KfxLMq+zDf62Pzz/d7aWtUvzUovuk18y9T6sfU8vnFctaY/' \ 66 | + '5L/ei9Tr/Up/tRlrM/y0l4y+xOtb6h9YqpaZrTyuor3Vb4vMnVWLutTJvdT6DniYN52bm289y+9jWLvoTm930g2+0AAAAAAAAAAA' \ 67 | + 'ADldZ6Nql/aSf0M18m4xcniFmHl5PFUI4V55krnVUiMVXIM1CRGKrYRWwItBpFoNRGwWFg3Ekg6RbBEdI9mGiV203fag0O1OfsxU' \ 68 | + 'fFu/0OmL1NvO3LtDT6QAAAAAAAAAAAANJrNRvCMuV0SuOvOcXEYuOZHkak7tfVQfPk80iOVVMyygwxVciM1BhlWwqLQWItEa+WA0' \ 69 | + 'FaiaQbi2miOuL3YZFj6dOPp2peH2cNte3JvwWS+TOserozjFvyuoAAAAAAAAAAAAHi0xS2qMuma8CVnOc4uAx0cyPH1p3auqg+TK' \ 70 | + 'PLMjlVUiMq5EZqEgxVciIgwiLDTFgsYsG4ykGolEjcW00V1xjYYSOZY+vSnd9e0VQ9HQpw9mEb99rv4nV6+M4kj1hQAAAAAAAAAA' \ 71 | + 'AAI1I3TXNNAfPtK0XGTT4Noy8rcY8VpKyD4co8s0RxqmRGKrkRmq5BmoMjKLC8otBUbBYxYNMoNROKI6RbTQdcY3ur2EdavTppb5' \ 72 | + 'JvpFZt+SN4vv2+POUfWUdHpsgAAAAAAAAAAAAAAc5rVo5temity7a6e0Svk3OnzOqOIxCI8nJ46hHCqJEYqtkYVsMoMjKDQGGg0i' \ 73 | + 'GoMNCI1EkHSL6Yd8Y+nakaFdGn6aorTqpWT3wp8F3vf5HXGPX2+n048105p9AAAAAAAAAAAAAAABhoDjtY9W5K9WirrfKmt8esea' \ 74 | + '6E4ebudrf1Yf4cbVVjLy8o88iOdVyRGKraDKLRGUGgIhYiGoEagkGonTi20km23ZJZtvkkHbCc3iPoeqOqDg1XxKW0s6dF57L4Sn' \ 75 | + '16cDpjj9vW2+26fyydubfcAAAAAAAAAAAAAAAAAADT6Y1doYntNbM/8AMjx71uZOHza21w1fPlxek9UsTSu4x9JHnDfbrHf5GbHl' \ 76 | + '6ux1MfHdz1anKLtJNPk1Z+TMvhyxs8qmgxUGiM1BoIjYLGLBqRKlRlN7MYyk+CScm/BEdccMsvEdJonUfFVrOolRjzlnLwivrY1M' \ 77 | + 'a+/S2GeXfLs7zQerWHwmcI7U+NWWcvD2fA6THh6elt8NPxO7cldwAAAAAAAAAAAAAAAAAAAAACjEYSnUVp04S/VFMM5YY5eY02J1' \ 78 | + 'Nwc81CUP0zaXk7memPly2Ojl8NfU/wAP6D3Vqq8Iv6Dpcb6Zp/dU/wDDyn/3E/2L7k6Gf6Xh9raX+HuHXrVar7tmP0L0xvH03Tnm' \ 79 | + '1sMNqZgYb6Tn+ubfwVkOmO2Oy0cfhusLg6VJWp04QXuxUfkafTjhjj4i8NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' \ 80 | + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//2Q==' 81 | 82 | cup_image_64 = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxAPDw0PDQ0PDg0PDQ0PDQ0PDQ8ODQ0NFRIWFhUSExUYHyghGB4lJxMWITEhJSor' \ 83 | + 'Li4uGB8zODMsNygtLisBCgoKDQ0NDxAPFSsdFRktLSs4LCsrKysrKysrKzcrLSsrKy0tKzcrKysrKysrKystNy0rKysrKysrKysr' \ 84 | + 'KysrK//AABEIAOEA4QMBIgACEQEDEQH/xAAcAAEAAQUBAQAAAAAAAAAAAAAAAQIDBAUGBwj/xABAEAEAAgECAgcEBAoLAQAAAAAA' \ 85 | + 'AQIDBBEFIQYHEhMxQWFRcZGxMkKBghQiI3KDkqGissEIF1NUYpOjwtHh8BX/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAQL/xAAWEQEB' \ 86 | + 'AQAAAAAAAAAAAAAAAAAAEQH/2gAMAwEAAhEDEQA/APcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' \ 87 | + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' \ 88 | + 'AEJavjHGKabsRe1K3vv2O3aKVnbbfn9scgbRG7jtV0g1XjSKxWfCa0i1fjzYF+OaqfHPMfmxWPkD0Dc3ee//AEs0/SzXn70q6ay0' \ 89 | + '+N7frSlHf7m7iseaZ+tPxlk4r+s/GVHWG7n8NLz4Tf8AWmGTSuSNvyto+9MiVuBqq58sfW329tYU243XHMRmmkbzFYmLecztHKRW' \ 90 | + '3EQkAAAAAAAAAAAAAABby56UibXvWlY8bWmKxH2y13SPjWPRae+fJtO3KlZtFe3f2b+UcpmZ8oiXzv0g41rOOavutPGfUT2prWkX' \ 91 | + 'tGGN5+rjjlWvrbefOdvAH0Nk6T6Cv0tdp4/TUl551q8c0mpppq6fU481/wAtE1pbteVZ5uMp1McVmsTP4LW08+xOptvHpvFWB0g6' \ 92 | + 'DcQ4Vp41GpjT1xfhGPfusk5LTNpiu2+0bRyhUYmk4jk0/b7jJOObREb18vWPZ4s7F0y1lYiLXrl287d5Fp98xZps/jLGmVSOjv03' \ 93 | + '1EzMzHYjs8opett7b+M9uszt6Ndbp7xKsztfBNd+W+Cm+3q02SWLkNV0tesjicf3f/Jj/lcjrO4p7dNH6H/tyMoQdl/Wjxfy1GGv' \ 94 | + 'l+LhhTbrH4raPxtZbf8Aw1rVx6uAdFm6Wa/J9PWZ538fykx8mz6LZb5dXpu8vbJPfYtptabfXj2uQxO06vcXb12jr7dRh393bjcH' \ 95 | + '0qECKAAAAAAAAAAAAAA8O/pBcbvXLp9JWZikaeMt9vC1r3tG3+nHxbrqI4TSmnz55rE5N6Ui3nG9Ztaft3j4Of8A6RXDLxl0urrE' \ 96 | + '93fDGG0+UXpe1o+MX/Y3HUXxuk0y6e1oi2SKZMUT52rE1vX38o+Erg9ecV1xaLvuC62IjnSMeSPSa3iXaxLXdI9H3+j1WKY37eDJ' \ 97 | + 'G3rtvHyQfLVrdqtbR9albfGIY9pXcNdsVYnxpNqT762mv8li0tIoySxrr1pWLoKJQlAEKoUK4BfxPSeqLS95r8M+VO1f3bVnb+Tz' \ 98 | + 'XD4va+ozQ721OaY5Ux0pE+tpmZ/hQevwAKAAAAAAAAAAAAAA03Szo7i4lpMulz8otzx5Ij8bFlj6N4/94TL5u4jwniHANVtel+xF' \ 99 | + '+1iy07Vcd4ieVsd48J9PH5vqpj63RYs9Jx58VMuO0bWpkrF6z9kg8e4P14460rXV6bJa8RtN68pn37bxLbf138PmOeDUe6YiGx4t' \ 100 | + '1P8AC802tipl0lp/sctrUj3UvvEfY4/inUXkjedJrcWSee1NRinHM/epv8io4HUWre2ovjiYx31WovjiY2mMd8k2pvHumGtyOy4l' \ 101 | + '0O1ugwXnXY6xvetaXpkjJS0RTaNp8fKPGHH6iNpUY9lmy5ZasCiUJlAJhMKd1UAyNNG9ofS/VTwzuOG4rTG1s8zln29nwr8v2vn7' \ 102 | + 'olwy2q1enwUjnkyRX3R5z9kRMvqzSYK4sePHSNqY6UpWPZWsbQir4jc3BIjdIAAAAAAAAAAAAAAAANV0m4VGs0ubBPjakzjn2ZI5' \ 103 | + '1l8x8b0VsOTJS9drVtatonymJ2fWEw8f65OjG141uGm9cnLP2a8q5IjlafZv84XDXit1qWTnpsxpEUShMqQSrqt7tl0f4Xk1eoxY' \ 104 | + 'MUb3yWiPbFY352n0jxQeudRnAezGXX5K7bTOHTzPtmI7do+O3xevd40PCNPTS4MOnxRtjxUiseU2nztPrM82dXNuK2PeJ7xg1uuR' \ 105 | + 'YGZFlcSxK2X6SC8IhIAAAAAAAAAAAAAACm9ItExaImJ8YmN4mFQDlOK9XfCtVM2y6GlbT9fDfJgn9yYhodR1M8Jn6P4VT0jUzaP3' \ 106 | + 'ol6SpsDyfN1K6D6up1cfexz/ALWPHUvoonnqdVMe/HH8nrlqLU4geZYOqDhlfpVz5PztRav8OzpODdEtJo940unri35WtG83mPW0' \ 107 | + 'zM/tdT3SYxA11NIvV07N7tVFAY1MK53a92U9kFqtF2tVUQkBKEgAAAAAAAAAAAAAAAAI2SApmDZUAp2TskBGxskBAkBAkAAAAAAA' \ 108 | + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//2Q==' 109 | 110 | if __name__ == '__main__': 111 | jsonrpcclient.request("http://127.0.0.1:{}".format(config.SERVER_PORT), "classify", image_type="jpg", image=bucket_image_64) 112 | jsonrpcclient.request("http://127.0.0.1:{}".format(config.SERVER_PORT), "classify", image_type="jpg", image=cup_image_64) 113 | -------------------------------------------------------------------------------- /service.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ExampleService", 3 | "service_spec": "service_spec", 4 | "organization": "SingularityNET", 5 | "path": "", 6 | "price": 1000000, 7 | "endpoint": "http://18.233.195.25:8080", 8 | "tags": [ 9 | "SingularityNET", 10 | "Example", 11 | "TensorFlow", 12 | "Image Classification" 13 | ], 14 | "metadata": { 15 | "description": "SingularityNET TensorFlow example image classification service" 16 | }, 17 | "networks": { 18 | "42": { 19 | "agentAddress": "0xf2B35821409baEe26aFcC955D7a332031003D95D" 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /service_spec/ExampleService.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | service ExampleService { 4 | rpc classify(ClassifyRequest) returns (ClassifyResponse); 5 | } 6 | 7 | message ClassifyRequest { 8 | string image_type = 1; 9 | string image = 2; 10 | } 11 | 12 | message ClassifyResponse { 13 | repeated string predictions = 1; 14 | repeated float confidences = 2; 15 | } 16 | 17 | --------------------------------------------------------------------------------