2022-07-28 23:25:17 +08:00
|
|
|
# Copyright (c) Alibaba, Inc. and its affiliates.
|
2022-08-03 21:25:16 +08:00
|
|
|
import os
|
2022-07-28 23:25:17 +08:00
|
|
|
import unittest
|
2022-08-03 21:25:16 +08:00
|
|
|
from os import path as osp
|
2022-07-28 23:25:17 +08:00
|
|
|
|
2022-08-03 21:25:16 +08:00
|
|
|
import cv2
|
2022-08-02 22:17:00 +08:00
|
|
|
from PIL import Image
|
|
|
|
|
|
2022-07-28 23:25:17 +08:00
|
|
|
from modelscope.models import Model
|
|
|
|
|
from modelscope.outputs import OutputKeys
|
|
|
|
|
from modelscope.pipelines import pipeline
|
|
|
|
|
from modelscope.utils.constant import Tasks
|
2022-08-23 14:27:19 +08:00
|
|
|
from modelscope.utils.cv.image_utils import created_boxed_image
|
2022-09-08 14:08:51 +08:00
|
|
|
from modelscope.utils.demo_utils import DemoCompatibilityCheck
|
2022-07-28 23:25:17 +08:00
|
|
|
from modelscope.utils.test_utils import test_level
|
|
|
|
|
|
|
|
|
|
|
2022-09-08 14:08:51 +08:00
|
|
|
class OfaTasksTest(unittest.TestCase, DemoCompatibilityCheck):
|
2022-07-28 23:25:17 +08:00
|
|
|
|
2022-08-03 21:25:16 +08:00
|
|
|
def setUp(self) -> None:
|
|
|
|
|
self.output_dir = 'unittest_output'
|
|
|
|
|
os.makedirs(self.output_dir, exist_ok=True)
|
|
|
|
|
|
|
|
|
|
def save_img(self, image_in, box, image_out):
|
2022-08-23 14:27:19 +08:00
|
|
|
cv2.imwrite(
|
|
|
|
|
osp.join(self.output_dir, image_out),
|
|
|
|
|
created_boxed_image(image_in, box))
|
2022-08-03 21:25:16 +08:00
|
|
|
|
2022-07-28 23:25:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_image_captioning_with_model(self):
|
2022-08-02 20:42:13 +08:00
|
|
|
model = Model.from_pretrained('damo/ofa_image-caption_coco_large_en')
|
2022-07-28 23:25:17 +08:00
|
|
|
img_captioning = pipeline(
|
|
|
|
|
task=Tasks.image_captioning,
|
|
|
|
|
model=model,
|
|
|
|
|
)
|
2022-08-04 17:24:44 +08:00
|
|
|
image = 'data/test/images/image_captioning.png'
|
|
|
|
|
result = img_captioning({'image': image})
|
2022-07-28 23:25:17 +08:00
|
|
|
print(result[OutputKeys.CAPTION])
|
|
|
|
|
|
2022-08-06 12:22:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2022-07-28 23:25:17 +08:00
|
|
|
def test_run_with_image_captioning_with_name(self):
|
|
|
|
|
img_captioning = pipeline(
|
|
|
|
|
Tasks.image_captioning,
|
2022-08-04 17:24:44 +08:00
|
|
|
model='damo/ofa_image-caption_coco_large_en')
|
2022-07-28 23:25:17 +08:00
|
|
|
result = img_captioning(
|
|
|
|
|
{'image': 'data/test/images/image_captioning.png'})
|
|
|
|
|
print(result[OutputKeys.CAPTION])
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_image_classification_with_model(self):
|
|
|
|
|
model = Model.from_pretrained(
|
|
|
|
|
'damo/ofa_image-classification_imagenet_large_en')
|
|
|
|
|
ofa_pipe = pipeline(Tasks.image_classification, model=model)
|
|
|
|
|
image = 'data/test/images/image_classification.png'
|
|
|
|
|
input = {'image': image}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
2022-08-06 12:22:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2022-07-28 23:25:17 +08:00
|
|
|
def test_run_with_image_classification_with_name(self):
|
|
|
|
|
ofa_pipe = pipeline(
|
|
|
|
|
Tasks.image_classification,
|
|
|
|
|
model='damo/ofa_image-classification_imagenet_large_en')
|
|
|
|
|
image = 'data/test/images/image_classification.png'
|
|
|
|
|
input = {'image': image}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_summarization_with_model(self):
|
|
|
|
|
model = Model.from_pretrained(
|
|
|
|
|
'damo/ofa_summarization_gigaword_large_en')
|
|
|
|
|
ofa_pipe = pipeline(Tasks.summarization, model=model)
|
|
|
|
|
text = 'five-time world champion michelle kwan withdrew' + \
|
|
|
|
|
'from the #### us figure skating championships on wednesday ,' + \
|
|
|
|
|
' but will petition us skating officials for the chance to ' + \
|
|
|
|
|
'compete at the #### turin olympics .'
|
|
|
|
|
input = {'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
2022-08-06 12:22:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2022-07-28 23:25:17 +08:00
|
|
|
def test_run_with_summarization_with_name(self):
|
|
|
|
|
ofa_pipe = pipeline(
|
|
|
|
|
Tasks.summarization,
|
|
|
|
|
model='damo/ofa_summarization_gigaword_large_en')
|
|
|
|
|
text = 'five-time world champion michelle kwan withdrew' + \
|
|
|
|
|
'from the #### us figure skating championships on wednesday ,' + \
|
|
|
|
|
' but will petition us skating officials for the chance to ' +\
|
|
|
|
|
'compete at the #### turin olympics .'
|
|
|
|
|
input = {'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_text_classification_with_model(self):
|
|
|
|
|
model = Model.from_pretrained(
|
|
|
|
|
'damo/ofa_text-classification_mnli_large_en')
|
|
|
|
|
ofa_pipe = pipeline(Tasks.text_classification, model=model)
|
|
|
|
|
text = 'One of our number will carry out your instructions minutely.'
|
|
|
|
|
text2 = 'A member of my team will execute your orders with immense precision.'
|
|
|
|
|
input = {'text': text, 'text2': text2}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
2022-08-06 12:22:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2022-07-28 23:25:17 +08:00
|
|
|
def test_run_with_text_classification_with_name(self):
|
|
|
|
|
ofa_pipe = pipeline(
|
|
|
|
|
Tasks.text_classification,
|
|
|
|
|
model='damo/ofa_text-classification_mnli_large_en')
|
|
|
|
|
text = 'One of our number will carry out your instructions minutely.'
|
|
|
|
|
text2 = 'A member of my team will execute your orders with immense precision.'
|
|
|
|
|
input = {'text': text, 'text2': text2}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_visual_entailment_with_model(self):
|
|
|
|
|
model = Model.from_pretrained(
|
|
|
|
|
'damo/ofa_visual-entailment_snli-ve_large_en')
|
|
|
|
|
ofa_pipe = pipeline(Tasks.visual_entailment, model=model)
|
|
|
|
|
image = 'data/test/images/dogs.jpg'
|
|
|
|
|
text = 'there are two birds.'
|
|
|
|
|
input = {'image': image, 'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
2022-08-06 12:22:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2022-07-28 23:25:17 +08:00
|
|
|
def test_run_with_visual_entailment_with_name(self):
|
|
|
|
|
ofa_pipe = pipeline(
|
|
|
|
|
Tasks.visual_entailment,
|
|
|
|
|
model='damo/ofa_visual-entailment_snli-ve_large_en')
|
|
|
|
|
image = 'data/test/images/dogs.jpg'
|
|
|
|
|
text = 'there are two birds.'
|
|
|
|
|
input = {'image': image, 'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_visual_grounding_with_model(self):
|
|
|
|
|
model = Model.from_pretrained(
|
|
|
|
|
'damo/ofa_visual-grounding_refcoco_large_en')
|
|
|
|
|
ofa_pipe = pipeline(Tasks.visual_grounding, model=model)
|
|
|
|
|
image = 'data/test/images/visual_grounding.png'
|
|
|
|
|
text = 'a blue turtle-like pokemon with round head'
|
|
|
|
|
input = {'image': image, 'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
2022-08-03 21:25:16 +08:00
|
|
|
image_name = image.split('/')[-2]
|
|
|
|
|
self.save_img(image, result[OutputKeys.BOXES],
|
|
|
|
|
osp.join('large_en_model_' + image_name + '.png'))
|
2022-07-28 23:25:17 +08:00
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_visual_grounding_with_name(self):
|
|
|
|
|
ofa_pipe = pipeline(
|
|
|
|
|
Tasks.visual_grounding,
|
|
|
|
|
model='damo/ofa_visual-grounding_refcoco_large_en')
|
|
|
|
|
image = 'data/test/images/visual_grounding.png'
|
|
|
|
|
text = 'a blue turtle-like pokemon with round head'
|
|
|
|
|
input = {'image': image, 'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
2022-08-03 21:25:16 +08:00
|
|
|
image_name = image.split('/')[-2]
|
|
|
|
|
self.save_img(image, result[OutputKeys.BOXES],
|
|
|
|
|
osp.join('large_en_name_' + image_name + '.png'))
|
|
|
|
|
|
2022-08-06 12:22:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2022-08-03 21:25:16 +08:00
|
|
|
def test_run_with_visual_grounding_zh_with_name(self):
|
|
|
|
|
model = 'damo/ofa_visual-grounding_refcoco_large_zh'
|
|
|
|
|
ofa_pipe = pipeline(Tasks.visual_grounding, model=model)
|
|
|
|
|
image = 'data/test/images/visual_grounding.png'
|
|
|
|
|
text = '一个圆头的蓝色宝可梦'
|
|
|
|
|
input = {'image': image, 'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
image_name = image.split('/')[-1]
|
|
|
|
|
self.save_img(image, result[OutputKeys.BOXES],
|
|
|
|
|
osp.join('large_zh_name_' + image_name))
|
2022-07-28 23:25:17 +08:00
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_visual_question_answering_with_model(self):
|
|
|
|
|
model = Model.from_pretrained(
|
|
|
|
|
'damo/ofa_visual-question-answering_pretrain_large_en')
|
2022-08-04 17:24:44 +08:00
|
|
|
ofa_pipe = pipeline(Tasks.visual_question_answering, model=model)
|
2022-07-28 23:25:17 +08:00
|
|
|
image = 'data/test/images/visual_question_answering.png'
|
|
|
|
|
text = 'what is grown on the plant?'
|
|
|
|
|
input = {'image': image, 'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
2022-08-06 12:22:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2022-07-28 23:25:17 +08:00
|
|
|
def test_run_with_visual_question_answering_with_name(self):
|
|
|
|
|
model = 'damo/ofa_visual-question-answering_pretrain_large_en'
|
2022-08-04 17:24:44 +08:00
|
|
|
ofa_pipe = pipeline(Tasks.visual_question_answering, model=model)
|
2022-07-28 23:25:17 +08:00
|
|
|
image = 'data/test/images/visual_question_answering.png'
|
|
|
|
|
text = 'what is grown on the plant?'
|
|
|
|
|
input = {'image': image, 'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
2022-08-02 20:42:13 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_image_captioning_distilled_with_model(self):
|
|
|
|
|
model = Model.from_pretrained(
|
|
|
|
|
'damo/ofa_image-caption_coco_distilled_en')
|
|
|
|
|
img_captioning = pipeline(
|
|
|
|
|
task=Tasks.image_captioning,
|
|
|
|
|
model=model,
|
|
|
|
|
)
|
2022-08-04 17:24:44 +08:00
|
|
|
image_path = 'data/test/images/image_captioning.png'
|
|
|
|
|
image = Image.open(image_path)
|
2022-08-02 22:17:00 +08:00
|
|
|
result = img_captioning(image)
|
2022-08-02 20:42:13 +08:00
|
|
|
print(result[OutputKeys.CAPTION])
|
|
|
|
|
|
2022-08-06 12:22:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2022-08-02 20:42:13 +08:00
|
|
|
def test_run_with_visual_entailment_distilled_model_with_name(self):
|
|
|
|
|
ofa_pipe = pipeline(
|
|
|
|
|
Tasks.visual_entailment,
|
|
|
|
|
model='damo/ofa_visual-entailment_snli-ve_distilled_v2_en')
|
|
|
|
|
image = 'data/test/images/dogs.jpg'
|
|
|
|
|
text = 'there are two birds.'
|
|
|
|
|
input = {'image': image, 'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_visual_grounding_distilled_model_with_model(self):
|
|
|
|
|
model = Model.from_pretrained(
|
|
|
|
|
'damo/ofa_visual-grounding_refcoco_distilled_en')
|
|
|
|
|
ofa_pipe = pipeline(Tasks.visual_grounding, model=model)
|
|
|
|
|
image = 'data/test/images/visual_grounding.png'
|
|
|
|
|
text = 'a blue turtle-like pokemon with round head'
|
|
|
|
|
input = {'image': image, 'text': text}
|
|
|
|
|
result = ofa_pipe(input)
|
|
|
|
|
print(result)
|
|
|
|
|
|
2022-08-06 12:22:17 +08:00
|
|
|
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
|
2022-08-04 15:33:31 +08:00
|
|
|
def test_run_with_text_to_image_synthesis_with_name(self):
|
|
|
|
|
model = 'damo/ofa_text-to-image-synthesis_coco_large_en'
|
|
|
|
|
ofa_pipe = pipeline(Tasks.text_to_image_synthesis, model=model)
|
|
|
|
|
example = {'text': 'a bear in the water.'}
|
|
|
|
|
result = ofa_pipe(example)
|
|
|
|
|
result[OutputKeys.OUTPUT_IMG].save('result.png')
|
|
|
|
|
print(f'Output written to {osp.abspath("result.png")}')
|
|
|
|
|
|
|
|
|
|
@unittest.skipUnless(test_level() >= 1, 'skip test in current test level')
|
|
|
|
|
def test_run_with_text_to_image_synthesis_with_model(self):
|
|
|
|
|
model = Model.from_pretrained(
|
|
|
|
|
'damo/ofa_text-to-image-synthesis_coco_large_en')
|
|
|
|
|
ofa_pipe = pipeline(Tasks.text_to_image_synthesis, model=model)
|
|
|
|
|
example = {'text': 'a bear in the water.'}
|
|
|
|
|
result = ofa_pipe(example)
|
|
|
|
|
result[OutputKeys.OUTPUT_IMG].save('result.png')
|
|
|
|
|
print(f'Output written to {osp.abspath("result.png")}')
|
|
|
|
|
|
2022-09-09 14:56:15 +08:00
|
|
|
@unittest.skip('demo compatibility test is only enabled on a needed-basis')
|
2022-09-08 14:08:51 +08:00
|
|
|
def test_demo_compatibility(self):
|
|
|
|
|
self.compatibility_check()
|
|
|
|
|
|
2022-07-28 23:25:17 +08:00
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
unittest.main()
|