diff --git a/cases/ai1.py b/cases/ai1.py index ff92825e..902289a2 100644 --- a/cases/ai1.py +++ b/cases/ai1.py @@ -4,9 +4,9 @@ from PIL import Image from background_generation import modelscope_warpper model = "damo/cv_background_generation_sd" -pipe = pipeline('background_generation_task', model=model, device='gpu', auto_collate=False, model_revision='v1.1.0') -main_image = 'https://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/demo_example/%E5%8C%96%E5%A6%86%E5%93%81/1c33fc5e8b084269ffdb4e0557c2c3c4.png' -reference_image = 'https://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/5d873b5f64b82bcbb235748347602dce38c6ec1d.jpg' -out = pipe(main_image, reference_image, num_images_per_prompt=1) -imgs = out[OutputKeys.OUTPUT_IMGS] +pipe = pipeline('background_generation_task', model=model, device='gpu',auto_collate=False,model_revision='v1.1.0') +main_image='https://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/demo_example/%E5%8C%96%E5%A6%86%E5%93%81/1c33fc5e8b084269ffdb4e0557c2c3c4.png' +reference_image='https://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/5d873b5f64b82bcbb235748347602dce38c6ec1d.jpg' +out=pipe(main_image,reference_image,num_images_per_prompt=1) +imgs=out[OutputKeys.OUTPUT_IMGS] imgs[0].save(f'result.jpg') diff --git a/cases/ai2.py b/cases/ai2.py new file mode 100644 index 00000000..48c55c45 --- /dev/null +++ b/cases/ai2.py @@ -0,0 +1,15 @@ +from modelscope.pipelines import pipeline +from modelscope.outputs import OutputKeys +from PIL import Image +from background_generation import modelscope_warpper + +model = "damo/cv_background_generation_sd" +pipe = pipeline('background_generation_task', model=model, device='gpu', auto_collate=False, model_revision='v1.1.0') +out = pipe( + 'https://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/demo_example/%E5%8C%96%E5%A6%86%E5%93%81/1c33fc5e8b084269ffdb4e0557c2c3c4.png', + 'https://vision-poster.oss-cn-shanghai.aliyuncs.com/lllcho.lc/data/test_data/5d873b5f64b82bcbb235748347602dce38c6ec1d.jpg', + num_inference_steps=20, + num_images_per_prompt=2, + seed=None, + noise_level=500 + ) diff --git a/cases/ai3.py b/cases/ai3.py new file mode 100644 index 00000000..f0fda6bd --- /dev/null +++ b/cases/ai3.py @@ -0,0 +1,55 @@ +import cv2 +import os +import numpy as np +import torch +from modelscope import snapshot_download +from PIL import Image +import onnxruntime + +def softmax(x): + x -= np.max(x, axis=0, keepdims=True) + x = np.exp(x) / np.sum(np.exp(x), axis=0, keepdims=True) + return x + +def get_rot(image, ort_session): + img_cv = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR) + img_clone = img_cv.copy() + img_np = cv2.resize(img_cv, (224, 224)) + img_np = img_np.astype(np.float32) + mean = np.array([103.53, 116.28, 123.675], dtype=np.float32).reshape((1, 1, 3)) + norm = np.array([0.01742919, 0.017507, 0.01712475], dtype=np.float32).reshape((1, 1, 3)) + img_np = (img_np - mean) * norm + img_tensor = torch.from_numpy(img_np) + img_tensor = img_tensor.unsqueeze(0) + img_nchw = img_tensor.permute(0, 3, 1, 2) + ort_inputs = {ort_session.get_inputs()[0].name: img_nchw.numpy()} + outputs = ort_session.run(None, ort_inputs) + logits = outputs[0].reshape((-1,)) + probs = softmax(logits) + rot_idx = np.argmax(probs) + if rot_idx == 1: + print('rot 90') + img_clone = cv2.transpose(img_clone) + img_clone = np.flip(img_clone, 1) + return Image.fromarray(cv2.cvtColor(img_clone, cv2.COLOR_BGR2RGB)) + elif rot_idx == 2: + print('rot 180') + img_clone = cv2.flip(img_clone, -1) + return Image.fromarray(cv2.cvtColor(img_clone, cv2.COLOR_BGR2RGB)) + elif rot_idx == 3: + print('rot 270') + img_clone = cv2.transpose(img_clone) + img_clone = np.flip(img_clone, 0) + return Image.fromarray(cv2.cvtColor(img_clone, cv2.COLOR_BGR2RGB)) + else: + return image + +model_dir = snapshot_download('Cherrytest/rot_bgr', revision='v1.0.0') +model_path = os.path.join(model_dir, 'rot_bgr.onnx') +ort_session = onnxruntime.InferenceSession(model_path) +img_path = 'path_of_your_image' +image = Image.open(img_path) +image = image.convert('RGB') +image = get_rot(image, ort_session) +out_path = 'path_to_save_image' +image.save(out_path) diff --git a/cases/ai4.py b/cases/ai4.py new file mode 100644 index 00000000..91c0c802 --- /dev/null +++ b/cases/ai4.py @@ -0,0 +1,52 @@ +import tempfile +from modelscope.msdatasets import MsDataset +from modelscope.metainfo import Trainers +from modelscope.trainers import build_trainer +from modelscope.utils.constant import DownloadMode +from modelscope.utils.hub import snapshot_download + + +train_dataset = MsDataset( + MsDataset.load( + "coco_2014_caption", + namespace="modelscope", + split="train[:100]", + download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS).remap_columns({ + 'image': 'image', + 'caption': 'text' + })) +test_dataset = MsDataset( + MsDataset.load( + "coco_2014_caption", + namespace="modelscope", + split="validation[:20]", + download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS).remap_columns({ + 'image': 'image', + 'caption': 'text' + })) + + +def cfg_modify_fn(cfg): + cfg.train.hooks = [{ + 'type': 'CheckpointHook', + 'interval': 2 + }, { + 'type': 'TextLoggerHook', + 'interval': 1 + }, { + 'type': 'IterTimerHook' + }] + cfg.train.max_epochs=2 + return cfg + +pretrained_model = 'damo/ofa_pretrain_base_zh' +pretrain_path = snapshot_download(pretrained_model, revision='v1.0.2') + +args = dict( + model=pretrain_path, + train_dataset=train_dataset, + eval_dataset=test_dataset, + cfg_modify_fn=cfg_modify_fn, + work_dir = tempfile.TemporaryDirectory().name) +trainer = build_trainer(name=Trainers.ofa, default_args=args) +trainer.train() diff --git a/cases/ai5.py b/cases/ai5.py new file mode 100644 index 00000000..2c55731c --- /dev/null +++ b/cases/ai5.py @@ -0,0 +1,28 @@ +# require modelscope>=0.3.7,目前默认已经超过,您检查一下即可 +# 按照更新镜像的方法处理或者下面的方法 +# pip install --upgrade modelscope -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html +# 需要单独安装decord,安装方法:pip install decord +import torch +from modelscope.utils.constant import Tasks +from modelscope.pipelines import pipeline +from modelscope.preprocessors.image import load_image + +pipeline = pipeline(task=Tasks.multi_modal_embedding, + model='damo/multi-modal_clip-vit-large-patch14_336_zh', model_revision='v1.0.1') +input_img = load_image('https://clip-cn-beijing.oss-cn-beijing.aliyuncs.com/pokemon.jpeg') # 支持皮卡丘示例图片路径/本地图片 返回PIL.Image +input_texts = ["杰尼龟", "妙蛙种子", "小火龙", "皮卡丘"] + +# 支持一张图片(PIL.Image)或多张图片(List[PIL.Image])输入,输出归一化特征向量 +img_embedding = pipeline.forward({'img': input_img})['img_embedding'] # 2D Tensor, [图片数, 特征维度] + +# 支持一条文本(str)或多条文本(List[str])输入,输出归一化特征向量 +text_embedding = pipeline.forward({'text': input_texts})['text_embedding'] # 2D Tensor, [文本数, 特征维度] + +# 计算图文相似度 +with torch.no_grad(): + # 计算内积得到logit,考虑模型temperature + logits_per_image = (img_embedding / pipeline.model.temperature) @ text_embedding.t() + # 根据logit计算概率分布 + probs = logits_per_image.softmax(dim=-1).cpu().numpy() + +print("图文匹配概率:", probs) diff --git a/cases/mixed.php b/cases/mixed.php new file mode 100644 index 00000000..b4dbfe09 --- /dev/null +++ b/cases/mixed.php @@ -0,0 +1,304 @@ + "world", +]); +$__value = 3; +$values->__setitem__(0, $__value); +$__value = 10; +$values->__setitem__(1, $__value); +$c = 1 + 1; +$d = 8 - 1; +$e = 10 * 2; +$f = 35 / 5; +$g = $operator->floordiv(5 , 3); +$h = $operator->floordiv(-5 , 3); +$j = $operator->floordiv(5.5 , 3); +$k = $operator->floordiv(-5 , 3); +$__value = 7 % 3; +$values->__setitem__(10, $__value); +$__value = $operator->pow(2 , 3); +$values->__setitem__(11, $__value); +$__value = 1 + 3 * 2; +$values->__setitem__(12, $__value); +$__value = 1 + 3 * 2; +$values->__setitem__(13, $__value); +$_ = true; +$_ = false; +$_ = !true; +$_ = !false; +$_ = true && false; +$_ = false || true; +$_ = true + true; +$_ = true * 8; +$_ = false - 5; +$_ = 0 == false; +$_ = 1 == true; +$_ = 2 == true; +$_ = -5 != false; +$_ = PyCore::bool(0); +$_ = PyCore::bool(4); +$_ = PyCore::bool(-6); +$_ = 0 && 2; +$_ = -5 || 0; +$_ = 1 == 1; +$_ = 2 == 1; +$_ = 1 != 1; +$_ = 2 != 1; +$_ = 1 < 10; +$_ = 1 > 10; +$_ = 2 <= 2; +$_ = 2 >= 2; +$_ = 1 < 2 && 2 < 3; +$_ = 2 < 3 && 3 < 2; +$_ = 1 < 2; +$_ = 2 < 3; +$a = new PyList([1, 2, 3, 4]); +$b = $a; +$_ = $b == $a; +$_ = $b == $a; +$_ = new PyList([1, 2, 3, 4]); +$_ = $b == $a; +$_ = $b == $a; +$_ = "This is a string."; +$_ = "This is also a string."; +$_ = "Hello " + "world!"; +$_ = "Hello world!"; +$_ = "This is a string"->__getitem__(0); +$_ = PyCore::len("This is a string"); +$name = "Reiko"; +$_ = "She said her name is " . $name . "."; +$_ = $name . " is " . PyCore::len($name) . " characters long."; +$_ = null; +$_ = "etc" == null; +$_ = null == null; +$_ = PyCore::bool(null); +$_ = PyCore::bool(0); +$_ = PyCore::bool(""); +$_ = PyCore::bool(new PyList([])); +$_ = PyCore::bool(new PyDict([ +])); +$_ = PyCore::bool([]); +PyCore::print("I'm Python. Nice to meet you!"); +PyCore::print("Hello, World", end: "!"); +$input_string_var = PyCore::input("Enter some data: "); +$some_var = 5; +$_ = 3 > 2 ? "yahoo!" : 2; + +function test() { + if (3 > 2) { + return "yahoo"; + } else { + return 2; + } + +} + + +$li = new PyList([]); +$other_li = new PyList([4, 5, 6]); +$li->append(1); +$li->append(2); +$li->append(4); +$li->append(3); +$li->pop(); +$li->append(3); +$_ = $li->__getitem__(0); +$_ = $li->__getitem__(-1); +$_ = $li->__getitem__(4); +$_ = $li->__getitem__(PyCore::slice(1, 3, null)); +$_ = $li->__getitem__(PyCore::slice(2, null, null)); +$_ = $li->__getitem__(PyCore::slice(null, 3, null)); +$_ = $li->__getitem__(PyCore::slice(null, null, 2)); +$_ = $li->__getitem__(PyCore::slice(null, null, -1)); +$li2 = $li->__getitem__(PyCore::slice(null, null, null)); +$li->__delitem__(2); + +$li->remove(2); +$li->remove(2); +$li->insert(1, 2); +$li->index(2); +$li->index(4); +$tup = [1, 2, 3]; +$tup->__getitem__(0); +$__value = 3; +$tup->__setitem__(0, $__value); +PyCore::type(1); +PyCore::type([1]); +PyCore::type([]); +$_ = PyCore::len($tup); +$_ = $tup + [4, 5, 6]; +$_ = $tup->__getitem__(PyCore::slice(null, 2, null)); +$_ = $tup->__contains__(2); +[$a, $b, $c] = [1, 2, 3]; +[$d, $e, $f] = [4, 5, 6]; +[$e, $d] = [$d, $e]; +$invalid_dict = new PyDict([ + 1 => "123", +]); +$_ = $invalid_dict->__getitem__("one"); +$_ = $invalid_dict->get("one"); +$filled_dict = new PyDict([ + "one" => 1, + "two" => 2, + "three" => 3, +]); +$_ = PyCore::list($filled_dict->keys()); +$_ = PyCore::list($filled_dict->keys()); +$_ = PyCore::list($filled_dict->values()); +$_ = PyCore::list($filled_dict->values()); +$_ = $filled_dict->__contains__("one"); +$_ = $filled_dict->__contains__(1); +$empty_set = PyCore::set(); +$some_set = new PySet([1, 1, 2, 2, 3, 4]); +$other_set = new PySet([3, 4, 5, 6]); +$filled_set = new PySet([1, 2, 3]); +$_ = $operator->bitand($filled_set , $other_set); +$_ = $operator->bitor($filled_set , $other_set); +$_ = new PySet([1, 2, 3, 4]) - new PySet([2, 3, 5]); +$_ = $operator->bitxor(new PySet([1, 2, 3, 4]) , new PySet([2, 3, 5])); +$_ = new PySet([1, 2]) >= new PySet([1, 2, 3]); +$_ = new PySet([1, 2]) <= new PySet([1, 2, 3]); +if ($some_var > 10) { + PyCore::print("some_var is totally bigger than 10."); +} else { + if ($some_var < 10) { + PyCore::print("some_var is smaller than 10."); + } else { + PyCore::print("some_var is indeed 10."); + } + +} + +$__iter = PyCore::iter(new PyList(["dog", "cat", "mouse"])); +while($current = PyCore::next($__iter)) { + $animal = $current; + PyCore::print(PyCore::str("{} is a mammal")->format($animal)); +} +$__iter = PyCore::iter(PyCore::range(4)); +while($current = PyCore::next($__iter)) { + $i = $current; + PyCore::print($i); +} +$animals = new PyList(["dog", "cat", "mouse"]); +$__iter = PyCore::iter(PyCore::enumerate($animals)); +while($current = PyCore::next($__iter)) { + [$i, $value] = $current; + PyCore::print($i, $value); +} +$x = 0; +while($x < 4) { + PyCore::print($x); + $x += 1; +} +try { + throw $builtins->IndexError("This is an index error"); +} catch(PyError $e) { + if (PyCore::isinstance($e, $builtins->IndexError)) { + throw $builtins->IndexError("This is an index error"); + } elseif (PyCore::isinstance($e, new PyTuple([$builtins->TypeError, $builtins->NameError]))) { + throw $builtins->IndexError("This is an index error"); + } else { + throw $e; + } +} finally { + PyCore::print("We can clean up resources here"); +} +$f__object = PyCore::open("myfile.txt"); +$f = $f__object->__enter__(); +try { + $__iter = PyCore::iter($f); + while($current = PyCore::next($__iter)) { + $line = $current; + PyCore::print($line); + } +} finally { + $f__object->__exit__(); +} + +$contents = new PyDict([ + "aa" => 12, + "bb" => 21, +]); +$file__object = PyCore::open("myfile1.txt", "w+"); +$file = $file__object->__enter__(); +try { + $file->write(PyCore::str($contents)); +} finally { + $file__object->__exit__(); +} + +$file__object = PyCore::open("myfile2.txt", "w+"); +$file = $file__object->__enter__(); +try { + $file->write($json->dumps($contents)); +} finally { + $file__object->__exit__(); +} + +$file__object = PyCore::open("myfile1.txt", "r+"); +$file = $file__object->__enter__(); +try { + $contents = $file->read(); +} finally { + $file__object->__exit__(); +} + +PyCore::print($contents); +$file__object = PyCore::open("myfile2.txt", "r+"); +$file = $file__object->__enter__(); +try { + $contents = $json->load($file); +} finally { + $file__object->__exit__(); +} + +PyCore::print($contents); +$filled_dict = new PyDict([ + "one" => 1, + "two" => 2, + "three" => 3, +]); +$our_iterable = $filled_dict->keys(); +PyCore::print($our_iterable); +$__iter = PyCore::iter($our_iterable); +while($current = PyCore::next($__iter)) { + $i = $current; + PyCore::print($i); +} +$our_iterable->__getitem__(1); +$our_iterator = PyCore::iter($our_iterable); +PyCore::next($our_iterator); +PyCore::next($our_iterator); +PyCore::next($our_iterator); +PyCore::next($our_iterator); +$our_iterator = PyCore::iter($our_iterable); +$__iter = PyCore::iter($our_iterator); +while($current = PyCore::next($__iter)) { + $i = $current; + PyCore::print($i); +} +PyCore::list($our_iterable); +PyCore::list($our_iterator); + +function add($x, $y) { + PyCore::print(PyCore::str("x is {} and y is {}")->format($x, $y)); + return $x + $y; +} + + +add(5, 6); +add(y: 6, x: 5); + +function varargs(...$args) { + return $args; +} + + +varargs(1, 2, 3); diff --git a/cases/mixed.py b/cases/mixed.py index 38141ce8..b50b03e8 100644 --- a/cases/mixed.py +++ b/cases/mixed.py @@ -79,8 +79,8 @@ _ = 2 < 3 and 3 < 2 # => False _ = 1 < 2 < 3 # => True _ = 2 < 3 < 2 # => False -_ = a = [1, 2, 3, 4] # Point a at a new list, [1, 2, 3, 4] -_ = b = a # Point b at what a is pointing to +a = [1, 2, 3, 4] # Point a at a new list, [1, 2, 3, 4] +b = a # Point b at what a is pointing to _ = b is a # => True, a and b refer to the same object _ = b == a # => True, a's and b's objects are equal _ = b = [1, 2, 3, 4] # Point b at a new list, [1, 2, 3, 4] diff --git a/conv.php b/conv.php index d92fe962..670a5c50 100644 --- a/conv.php +++ b/conv.php @@ -277,7 +277,7 @@ class Translator function parseSlice($slice, $op = 'Load') { - if ($slice->_type != 'Constant') { + if ($slice->_type == 'Slice') { $_args[] = $slice->lower ? $this->parseTarget($slice->lower) : 'null'; $_args[] = $slice->upper ? $this->parseTarget($slice->upper) : 'null'; $_args[] = $slice->step ? $this->parseTarget($slice->step) : 'null';