Server tests for context images for 2D tasks (#3310)

* Add server test for context images.

* Move server test for context images in engine/tests
main
MashaSS 5 years ago committed by GitHub
parent d2d75d9158
commit 0d56e2923f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -28,6 +28,7 @@ from pycocotools import coco as coco_loader
from rest_framework import status
from rest_framework.test import APIClient, APITestCase
from datumaro.util.test_utils import TestDir
from cvat.apps.engine.models import (AttributeSpec, AttributeType, Data, Job, Project,
Segment, StatusChoice, Task, Label, StorageMethodChoice, StorageChoice)
from cvat.apps.engine.media_extractors import ValidateDimension
@ -5283,3 +5284,98 @@ class ServerShareAPITestCase(APITestCase):
def test_api_v1_server_share_no_auth(self):
response = self._run_api_v1_server_share(None, "/")
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
class TaskAnnotation2DContext(APITestCase):
def setUp(self):
self.client = APIClient()
self.task = {
"name": "my archive task without copying #11",
"overlap": 0,
"segment_size": 0,
"labels": [
{"name": "car"},
{"name": "person"},
]
}
@classmethod
def setUpTestData(cls):
create_db_users(cls)
def _get_request_with_data(self, path, data, user):
with ForceLogin(user, self.client):
response = self.client.get(path, data)
return response
def _get_request(self, path, user):
with ForceLogin(user, self.client):
response = self.client.get(path)
return response
def _create_task(self, data, image_data):
with ForceLogin(self.user, self.client):
response = self.client.post('/api/v1/tasks', data=data, format="json")
assert response.status_code == status.HTTP_201_CREATED, response.status_code
tid = response.data["id"]
response = self.client.post("/api/v1/tasks/%s/data" % tid,
data=image_data)
assert response.status_code == status.HTTP_202_ACCEPTED, response.status_code
response = self.client.get("/api/v1/tasks/%s" % tid)
task = response.data
return task
def create_zip_archive_with_related_images(self, file_name, test_dir, context_images_info):
with tempfile.TemporaryDirectory() as tmp_dir:
for img in context_images_info:
image = Image.new('RGB', size=(100, 50))
image.save(osp.join(tmp_dir, img), 'png')
if context_images_info[img]:
related_path = osp.join(tmp_dir, "related_images", img.replace(".", "_"))
os.makedirs(related_path)
image.save(osp.join(related_path, f"related_{img}"), 'png')
zip_file_path = osp.join(test_dir, file_name)
shutil.make_archive(zip_file_path, 'zip', tmp_dir)
return f"{zip_file_path}.zip"
def test_check_flag_has_related_context(self):
with TestDir() as test_dir:
test_cases = {
"All images with context": {"image_1.png": True, "image_2.png": True},
"One image with context": {"image_1.png": True, "image_2.png": False}
}
for test_case, context_img_data in test_cases.items():
filename = self.create_zip_archive_with_related_images(test_case, test_dir, context_img_data)
img_data = {
"client_files[0]": open(filename, 'rb'),
"image_quality": 75,
}
task = self._create_task(self.task, img_data)
task_id = task["id"]
response = self._get_request("/api/v1/tasks/%s/data/meta" % task_id, self.admin)
for frame in response.data["frames"]:
self.assertEqual(context_img_data[frame["name"]], frame["has_related_context"])
def test_fetch_related_image_from_server(self):
test_name = self._testMethodName
context_img_data ={"image_1.png": True}
with TestDir() as test_dir:
filename = self.create_zip_archive_with_related_images(test_name, test_dir, context_img_data)
img_data = {
"client_files[0]": open(filename, 'rb'),
"image_quality": 75,
}
task = self._create_task(self.task , img_data)
task_id = task["id"]
data = {
"quality": "original",
"type": "context_image",
"number": 0
}
response = self._get_request_with_data("/api/v1/tasks/%s/data" % task_id, data, self.admin)
self.assertEqual(response.status_code, status.HTTP_200_OK)

Loading…
Cancel
Save