提交 7098f925 编写于 作者: W wuzewu

Fix ci issue

上级 315a3084
...@@ -70,15 +70,14 @@ cat ...@@ -70,15 +70,14 @@ cat
dog dog
``` ```
### 自定义数据加载 ### 自定义数据加载
加载图像类自定义数据集,用户仅需要继承基类BaseCVDatast,修改数据集存放地址即可。具体使用如下: 加载图像类自定义数据集,用户仅需要继承基类BaseCVDatast,修改数据集存放地址即可。具体使用如下:
**NOTE:**
* 数据集文件编码格式建议为utf8格式。
* dataset_dir为数据集实际路径,需要填写全路径,以下示例以`/test/data`为例。
* 训练/验证/测试集的数据列表文件中的图片路径需要相对于dataset_dir的相对路径,例如图片的实际位置为`/test/data/dog/dog1.jpg`。base_path为`/test/data`,则文件中填写的路径应该为`dog/dog1.jpg`
* 如果您还有预测数据(没有文本类别),可以将预测数据存放在predict_list.txt文件,文件格式和train_list.txt类似。去掉label一列即可
* 如果您的数据集类别较少,可以不用定义label_list.txt,可以选择定义label_list=["数据集所有类别"]。
* 分类任务中,数据集的label必须从0开始计数
**NOTE:**
* 数据集文件编码格式建议为utf8格式。
* dataset_dir为数据集实际路径,需要填写全路径,以下示例以`/test/data`为例。
* 训练/验证/测试集的数据列表文件中的图片路径需要相对于dataset_dir的相对路径,例如图片的实际位置为`/test/data/dog/dog1.jpg`。base_path为`/test/data`,则文件中填写的路径应该为`dog/dog1.jpg`
* 如果您还有预测数据(没有文本类别),可以将预测数据存放在predict_list.txt文件,文件格式和train_list.txt类似。去掉label一列即可
* 如果您的数据集类别较少,可以不用定义label_list.txt,可以选择定义label_list=["数据集所有类别"]。
* 分类任务中,数据集的label必须从0开始计数
...@@ -12,6 +12,7 @@ import paddle.fluid as fluid ...@@ -12,6 +12,7 @@ import paddle.fluid as fluid
import paddlehub as hub import paddlehub as hub
from translate import Translator from translate import Translator
@moduleinfo( @moduleinfo(
name="reading_pictures_writing_poems", name="reading_pictures_writing_poems",
version="1.0.0", version="1.0.0",
...@@ -26,9 +27,9 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -26,9 +27,9 @@ class ReadingPicturesWritingPoems(hub.Module):
""" """
self.pretrained_model_path = os.path.join(self.directory, "assets", self.pretrained_model_path = os.path.join(self.directory, "assets",
"infer_model") "infer_model")
self.module_image = hub.Module(name="xception71_imagenet") # 调用图像分类的模型 self.module_image = hub.Module(name="xception71_imagenet") # 调用图像分类的模型
self.module_similar = hub.Module(name="ernie_gen_couplet") # 调用对联生成的模型 self.module_similar = hub.Module(name="ernie_gen_couplet") # 调用对联生成的模型
self.module_poem = hub.Module(name="ernie_gen_poetry") # 调用古诗生成的模型 self.module_poem = hub.Module(name="ernie_gen_poetry") # 调用古诗生成的模型
def is_chinese(self, string): def is_chinese(self, string):
""" """
...@@ -38,10 +39,10 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -38,10 +39,10 @@ class ReadingPicturesWritingPoems(hub.Module):
Return Return
bool bool
""" """
if (len(string) <= 1): # 去除只有单个字或者为空的字符串 if (len(string) <= 1): # 去除只有单个字或者为空的字符串
return False return False
for chart in string: # 把除了中文的所有字母、数字、符号去除 for chart in string: # 把除了中文的所有字母、数字、符号去除
if (chart < u'\u4e00' or chart > u'\u9fff'): if (chart < u'\u4e00' or chart > u'\u9fff'):
return False return False
...@@ -52,10 +53,12 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -52,10 +53,12 @@ class ReadingPicturesWritingPoems(hub.Module):
results_image = self.module_image.classification(data=input_dict) results_image = self.module_image.classification(data=input_dict)
PictureClassification = list(results_image[0][0].keys())[0] PictureClassification = list(results_image[0][0].keys())[0]
translator = Translator(to_lang="chinese") translator = Translator(to_lang="chinese")
PictureClassification_ch = translator.translate("{}".format(PictureClassification)) PictureClassification_ch = translator.translate(
"{}".format(PictureClassification))
texts = ["{}".format(PictureClassification_ch)] texts = ["{}".format(PictureClassification_ch)]
results_keywords = self.module_similar.generate(texts=texts, use_gpu=use_gpu, beam_width=20) results_keywords = self.module_similar.generate(
Words = [] # 将符合标准的近义词保存在这里(标准:字符串为中文且长度大于1) texts=texts, use_gpu=use_gpu, beam_width=20)
Words = [] # 将符合标准的近义词保存在这里(标准:字符串为中文且长度大于1)
for item in range(20): for item in range(20):
if (self.is_chinese(results_keywords[0][item])): if (self.is_chinese(results_keywords[0][item])):
Words.append(results_keywords[0][item]) Words.append(results_keywords[0][item])
...@@ -65,10 +68,11 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -65,10 +68,11 @@ class ReadingPicturesWritingPoems(hub.Module):
ThirdWord = Words[4] + Words[5] ThirdWord = Words[4] + Words[5]
FourthWord = Words[6] + Words[7] FourthWord = Words[6] + Words[7]
# 出句和对句,也可以理解为上下句(专业讲法是出句和对句,古诗词是中国传统文化,出句和对句的英文翻译即拼音) # 出句和对句,也可以理解为上下句(专业讲法是出句和对句,古诗词是中国传统文化,出句和对句的英文翻译即拼音)
ChuJu = FirstWord + SecondWord # 出句 ChuJu = FirstWord + SecondWord # 出句
DuiJu = ThirdWord + FourthWord # 对句 DuiJu = ThirdWord + FourthWord # 对句
FirstPoetry = ["{:.5},{:.5}。".format(ChuJu, DuiJu)] # 古诗词的上阕 FirstPoetry = ["{:.5},{:.5}。".format(ChuJu, DuiJu)] # 古诗词的上阕
results = self.module_poem.generate(texts=FirstPoetry, use_gpu=use_gpu, beam_width=5) results = self.module_poem.generate(
texts=FirstPoetry, use_gpu=use_gpu, beam_width=5)
SecondPoetry = ["{:.12}".format(results[0][0])] SecondPoetry = ["{:.12}".format(results[0][0])]
Poetrys = [] Poetrys = []
Poetrys.append(FirstPoetry) Poetrys.append(FirstPoetry)
...@@ -80,7 +84,7 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -80,7 +84,7 @@ class ReadingPicturesWritingPoems(hub.Module):
'image': image, 'image': image,
'Poetrys': "{}".format(Poetrys[0][0] + Poetrys[1][0]) 'Poetrys': "{}".format(Poetrys[0][0] + Poetrys[1][0])
}] }]
return results return results
@runnable @runnable
...@@ -135,7 +139,7 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -135,7 +139,7 @@ class ReadingPicturesWritingPoems(hub.Module):
type=str, type=str,
default=None, default=None,
help="Pictures to write poetry") help="Pictures to write poetry")
def check_input_data(self, args): def check_input_data(self, args):
input_data = [] input_data = []
if args.input_image: if args.input_image:
...@@ -145,6 +149,7 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -145,6 +149,7 @@ class ReadingPicturesWritingPoems(hub.Module):
input_data = args.input_image input_data = args.input_image
if input_data == []: if input_data == []:
raise RuntimeError("The input data is inconsistent with expectations.") raise RuntimeError(
"The input data is inconsistent with expectations.")
return input_data return input_data
...@@ -118,9 +118,7 @@ class MODULE(hub.Module): ...@@ -118,9 +118,7 @@ class MODULE(hub.Module):
self.add_module_config_arg() self.add_module_config_arg()
self.add_module_input_arg() self.add_module_input_arg()
args = self.parser.parse_args(argvs) args = self.parser.parse_args(argvs)
results = self.predict( results = self.predict(paths=[args.input_path], use_gpu=args.use_gpu)
paths=[args.input_path],
use_gpu=args.use_gpu)
return results return results
def add_module_config_arg(self): def add_module_config_arg(self):
......
...@@ -174,4 +174,3 @@ class ErnieGen(hub.NLPPredictionModule): ...@@ -174,4 +174,3 @@ class ErnieGen(hub.NLPPredictionModule):
texts=input_data, use_gpu=args.use_gpu, beam_width=args.beam_width) texts=input_data, use_gpu=args.use_gpu, beam_width=args.beam_width)
return results return results
\ No newline at end of file
...@@ -14,6 +14,7 @@ from translate import Translator ...@@ -14,6 +14,7 @@ from translate import Translator
import reading_pictures_writing_poems_for_midautumn.MidAutumnDetection.module as MidAutumnDetection import reading_pictures_writing_poems_for_midautumn.MidAutumnDetection.module as MidAutumnDetection
import reading_pictures_writing_poems_for_midautumn.MidAutumnPoetry.module as MidAutumnPoetry import reading_pictures_writing_poems_for_midautumn.MidAutumnPoetry.module as MidAutumnPoetry
@moduleinfo( @moduleinfo(
name="reading_pictures_writing_poems_for_midautumn", name="reading_pictures_writing_poems_for_midautumn",
version="1.0.0", version="1.0.0",
...@@ -26,20 +27,27 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -26,20 +27,27 @@ class ReadingPicturesWritingPoems(hub.Module):
""" """
Initialize with the necessary elements Initialize with the necessary elements
""" """
self.pretrained_model_path = os.path.join(self.directory, "assets", "infer_model") self.pretrained_model_path = os.path.join(self.directory, "assets",
self.module_image = MidAutumnDetection.MODULE(directory="reading_pictures_writing_poems_for_midautumn/MidAutumnDetection") # 调用目标检测的模型 "infer_model")
self.module_similar = MidAutumnPoetry.ErnieGen(directory='reading_pictures_writing_poems_for_midautumn/MidAutumnPoetry') # 调用根据关键词生成古诗上阕的模型 self.module_image = MidAutumnDetection.MODULE(
self.module_poem = hub.Module(name="ernie_gen_poetry") # 调用古诗生成的模型 directory=
"reading_pictures_writing_poems_for_midautumn/MidAutumnDetection"
) # 调用目标检测的模型
self.module_similar = MidAutumnPoetry.ErnieGen(
directory=
'reading_pictures_writing_poems_for_midautumn/MidAutumnPoetry'
) # 调用根据关键词生成古诗上阕的模型
self.module_poem = hub.Module(name="ernie_gen_poetry") # 调用古诗生成的模型
def WritingPoem(self, images, use_gpu=False): def WritingPoem(self, images, use_gpu=False):
# 目标检测,输入图片,输入得分最高的标签 # 目标检测,输入图片,输入得分最高的标签
results_image = self.module_image.predict(images = images) results_image = self.module_image.predict(images=images)
best = {'score':0, 'category':'none'} best = {'score': 0, 'category': 'none'}
for item in results_image: for item in results_image:
for items in item: for items in item:
if (items['score'] > best['score']): if (items['score'] > best['score']):
best['score'], best['category'] = items['score'], items['category'] best['score'], best['category'] = items['score'], items[
'category']
if best['category'] == 'MoonCake': if best['category'] == 'MoonCake':
objects = ['月饼'] objects = ['月饼']
elif best['category'] == 'moon': elif best['category'] == 'moon':
...@@ -51,10 +59,12 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -51,10 +59,12 @@ class ReadingPicturesWritingPoems(hub.Module):
else: else:
objects = ['中秋节'] objects = ['中秋节']
# 根据关键词生成古诗上阕 # 根据关键词生成古诗上阕
FirstPoetrys = self.module_similar.generate(texts=objects, use_gpu=True, beam_width=5) FirstPoetrys = self.module_similar.generate(
texts=objects, use_gpu=True, beam_width=5)
FirstPoetry = [FirstPoetrys[0][0]] FirstPoetry = [FirstPoetrys[0][0]]
# 调用古诗生成模型,使用上阕生成下阕 # 调用古诗生成模型,使用上阕生成下阕
SecondPoetry = self.module_poem.generate(texts=FirstPoetry, use_gpu=True, beam_width=5) SecondPoetry = self.module_poem.generate(
texts=FirstPoetry, use_gpu=True, beam_width=5)
Poetrys = [] Poetrys = []
Poetrys.append(FirstPoetry[0]) Poetrys.append(FirstPoetry[0])
Poetrys.append(SecondPoetry[0][0]) Poetrys.append(SecondPoetry[0][0])
...@@ -62,7 +72,7 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -62,7 +72,7 @@ class ReadingPicturesWritingPoems(hub.Module):
'images': images, 'images': images,
'Poetrys': "{}".format(Poetrys[0] + Poetrys[1]) 'Poetrys': "{}".format(Poetrys[0] + Poetrys[1])
}] }]
return results return results
@runnable @runnable
...@@ -117,7 +127,7 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -117,7 +127,7 @@ class ReadingPicturesWritingPoems(hub.Module):
type=str, type=str,
default=None, default=None,
help="Pictures to write poetry") help="Pictures to write poetry")
def check_input_data(self, args): def check_input_data(self, args):
input_data = [] input_data = []
if args.input_image: if args.input_image:
...@@ -127,6 +137,7 @@ class ReadingPicturesWritingPoems(hub.Module): ...@@ -127,6 +137,7 @@ class ReadingPicturesWritingPoems(hub.Module):
input_data = args.input_image input_data = args.input_image
if input_data == []: if input_data == []:
raise RuntimeError("The input data is inconsistent with expectations.") raise RuntimeError(
"The input data is inconsistent with expectations.")
return input_data return input_data
\ No newline at end of file
...@@ -13,13 +13,12 @@ class ReadingPicturesWritingPoemsTestCase(TestCase): ...@@ -13,13 +13,12 @@ class ReadingPicturesWritingPoemsTestCase(TestCase):
'image': 'castle.jpg', 'image': 'castle.jpg',
'Poetrys': '山川山陵山,沟渠村庄沟。我来春雨余,草木亦已柔。' 'Poetrys': '山川山陵山,沟渠村庄沟。我来春雨余,草木亦已柔。'
}] }]
def test_writing_poems(self): def test_writing_poems(self):
# test gpu # test gpu
results = self.module.WritingPoem( results = self.module.WritingPoem(image=self.test_image, use_gpu=True)
image=self.test_image, use_gpu=True)
self.assertEqual(results, self.results) self.assertEqual(results, self.results)
if __name__ == '__main__': if __name__ == '__main__':
main() main()
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册