Pluto0616 commited on
Commit
b2cfc1d
·
verified ·
1 Parent(s): 18538b4

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +48 -0
  2. demo.py +119 -0
  3. demo/__init__.py +8 -0
  4. demo/__pycache__/__init__.cpython-310.pyc +0 -0
  5. demo/__pycache__/agent.cpython-310.pyc +0 -0
  6. demo/__pycache__/theme.cpython-310.pyc +0 -0
  7. demo/agent.py +105 -0
  8. demo/bot.png +0 -0
  9. demo/food/14456664_117_IMG_8176.jpeg +3 -0
  10. demo/food/14456664_126_86838F28-912B-42A4-80C1-BD060B649081.jpeg +0 -0
  11. demo/food/14456664_127_1E703639-9169-4EB4-8A5D-3B1E226F639B.jpeg +3 -0
  12. demo/food/14456664_129_IMG_20220605_181308.jpg +0 -0
  13. demo/food/14456664_130_IMG_20220605_180820.jpg +0 -0
  14. demo/food/14456664_133_IMG_20220709_153436.jpg +0 -0
  15. demo/food/14456664_134_IMG_20220709_153652.jpg +0 -0
  16. demo/food/14456664_136_IMG_20220709_233905.jpg +0 -0
  17. demo/food/14456664_137_IMG_20220717_143941.jpg +0 -0
  18. demo/food/14456664_139_IMG_0917-EDIT.jpg +0 -0
  19. demo/food/14456664_141_IMG_1724.jpg +0 -0
  20. demo/food/14456664_147_IMG_20190225_184723.jpg +0 -0
  21. demo/food/14456664_149_IMG_20180812_182400.jpg +0 -0
  22. demo/food/14456664_14_IMG_20220721_150241.jpg +3 -0
  23. demo/food/14456664_150_IMG_20181218_190852.jpg +0 -0
  24. demo/food/14456664_153_IMG_20240411_102841.jpg +3 -0
  25. demo/food/14456664_155_IMG_20240403_094547.jpg +3 -0
  26. demo/food/14456664_158_IMG_20240416_141427.jpg +3 -0
  27. demo/food/14456664_159_IMG_20240416_140243.jpg +3 -0
  28. demo/food/14456664_187_mmexport1713446177339.jpg +3 -0
  29. demo/food/14456664_19_IMG_0395.jpeg +3 -0
  30. demo/food/14456664_201_mmexport1713452408322.jpg +0 -0
  31. demo/food/14456664_217_IMG_3854.jpeg +3 -0
  32. demo/food/14456664_22_IMG_20240404_135935.jpg +3 -0
  33. demo/food/14456664_236_IMG_4742.jpeg +3 -0
  34. demo/food/14456664_238_d370e16ff482d13a0718c6fb4cd7ffbb.jpeg +0 -0
  35. demo/food/14456664_239_mmexport1713518196678.jpg +0 -0
  36. demo/food/14456664_26_IMG_3472.jpeg +0 -0
  37. demo/food/14456664_34_IMG_0400.jpeg +3 -0
  38. demo/food/14456664_36_20240410160819.jpg +0 -0
  39. demo/food/14456664_40_IMG_20170613_190017.jpg +3 -0
  40. demo/food/14456664_41_IMG_20190216_124017.jpeg +0 -0
  41. demo/food/14456664_50_mmexport1712821641752.jpg +0 -0
  42. demo/food/14456664_61_mmexport1550554859117.jpg +3 -0
  43. demo/food/14456664_64_IMG_20240409_181047.jpg +3 -0
  44. demo/food/14456664_68_IMG_0971.jpeg +3 -0
  45. demo/food/14456664_70_IMG_0581.jpeg +3 -0
  46. demo/food/14456664_72_IMG_0618.jpeg +3 -0
  47. demo/food/14456664_80_IMG_6323.jpeg +3 -0
  48. demo/food/14456664_82_MVIMG_20240413_161454.jpeg +0 -0
  49. demo/food/14456664_87_IMG_5316.jpeg +3 -0
  50. demo/food/14456664_88_wx_camera_1712730236546.jpg +3 -0
.gitattributes CHANGED
@@ -33,3 +33,51 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ demo/food/14456664_117_IMG_8176.jpeg filter=lfs diff=lfs merge=lfs -text
37
+ demo/food/14456664_127_1E703639-9169-4EB4-8A5D-3B1E226F639B.jpeg filter=lfs diff=lfs merge=lfs -text
38
+ demo/food/14456664_14_IMG_20220721_150241.jpg filter=lfs diff=lfs merge=lfs -text
39
+ demo/food/14456664_153_IMG_20240411_102841.jpg filter=lfs diff=lfs merge=lfs -text
40
+ demo/food/14456664_155_IMG_20240403_094547.jpg filter=lfs diff=lfs merge=lfs -text
41
+ demo/food/14456664_158_IMG_20240416_141427.jpg filter=lfs diff=lfs merge=lfs -text
42
+ demo/food/14456664_159_IMG_20240416_140243.jpg filter=lfs diff=lfs merge=lfs -text
43
+ demo/food/14456664_187_mmexport1713446177339.jpg filter=lfs diff=lfs merge=lfs -text
44
+ demo/food/14456664_19_IMG_0395.jpeg filter=lfs diff=lfs merge=lfs -text
45
+ demo/food/14456664_217_IMG_3854.jpeg filter=lfs diff=lfs merge=lfs -text
46
+ demo/food/14456664_22_IMG_20240404_135935.jpg filter=lfs diff=lfs merge=lfs -text
47
+ demo/food/14456664_236_IMG_4742.jpeg filter=lfs diff=lfs merge=lfs -text
48
+ demo/food/14456664_34_IMG_0400.jpeg filter=lfs diff=lfs merge=lfs -text
49
+ demo/food/14456664_40_IMG_20170613_190017.jpg filter=lfs diff=lfs merge=lfs -text
50
+ demo/food/14456664_61_mmexport1550554859117.jpg filter=lfs diff=lfs merge=lfs -text
51
+ demo/food/14456664_64_IMG_20240409_181047.jpg filter=lfs diff=lfs merge=lfs -text
52
+ demo/food/14456664_68_IMG_0971.jpeg filter=lfs diff=lfs merge=lfs -text
53
+ demo/food/14456664_70_IMG_0581.jpeg filter=lfs diff=lfs merge=lfs -text
54
+ demo/food/14456664_72_IMG_0618.jpeg filter=lfs diff=lfs merge=lfs -text
55
+ demo/food/14456664_80_IMG_6323.jpeg filter=lfs diff=lfs merge=lfs -text
56
+ demo/food/14456664_87_IMG_5316.jpeg filter=lfs diff=lfs merge=lfs -text
57
+ demo/food/14456664_88_wx_camera_1712730236546.jpg filter=lfs diff=lfs merge=lfs -text
58
+ demo/food/14521898_108_IMG_6205.jpeg filter=lfs diff=lfs merge=lfs -text
59
+ demo/food/14521898_109_IMG_5997.jpeg filter=lfs diff=lfs merge=lfs -text
60
+ demo/food/14521898_112_IMG_3570.jpeg filter=lfs diff=lfs merge=lfs -text
61
+ demo/food/14521898_117_IMG_1362.jpeg filter=lfs diff=lfs merge=lfs -text
62
+ demo/food/14521898_122_53D0E884-E012-4FFA-8BD7-8F5666A53123.jpeg filter=lfs diff=lfs merge=lfs -text
63
+ demo/food/14521898_144_IMG_8800.jpeg filter=lfs diff=lfs merge=lfs -text
64
+ demo/food/14521898_14_IMG_3852.jpeg filter=lfs diff=lfs merge=lfs -text
65
+ demo/food/14521898_162_IMG_0356.jpeg filter=lfs diff=lfs merge=lfs -text
66
+ demo/food/14521898_168_D4D36C59-2D68-4354-B05C-B3065F6581AA.jpeg filter=lfs diff=lfs merge=lfs -text
67
+ demo/food/14521898_174_IMG_8019.jpeg filter=lfs diff=lfs merge=lfs -text
68
+ demo/food/14521898_183_IMG_20240502_122921.jpg filter=lfs diff=lfs merge=lfs -text
69
+ demo/food/14521898_209_IMG_3105.jpeg filter=lfs diff=lfs merge=lfs -text
70
+ demo/food/14521898_211_IMG_9139.jpeg filter=lfs diff=lfs merge=lfs -text
71
+ demo/food/14521898_237_IMG_5909.jpeg filter=lfs diff=lfs merge=lfs -text
72
+ demo/food/14521898_257_79874AA6-4F23-4AD6-96E2-7F64039A81C0.jpeg filter=lfs diff=lfs merge=lfs -text
73
+ demo/food/14521898_261_0E3192C7-1B0D-4C4D-9788-5E7A5E6E92BA.jpeg filter=lfs diff=lfs merge=lfs -text
74
+ demo/food/14521898_262_75B3AEDF-C705-400B-AE86-3FA7A92B624C.jpeg filter=lfs diff=lfs merge=lfs -text
75
+ demo/food/14521898_265_1C4A3265-A18E-46C2-A264-4384B85A49C0.jpeg filter=lfs diff=lfs merge=lfs -text
76
+ demo/food/14521898_44_930F3702-FC28-498F-A5A7-9E01AA5AEA15.jpeg filter=lfs diff=lfs merge=lfs -text
77
+ demo/food/14521898_55_IMG_8533.jpeg filter=lfs diff=lfs merge=lfs -text
78
+ demo/food/14521898_65_IMG_20240424_121225.jpg filter=lfs diff=lfs merge=lfs -text
79
+ demo/food/14521898_75_IMG_8637.jpeg filter=lfs diff=lfs merge=lfs -text
80
+ demo/food/14521898_79_IMG_2612.jpeg filter=lfs diff=lfs merge=lfs -text
81
+ demo/food/14521898_80_IMG_2613.jpeg filter=lfs diff=lfs merge=lfs -text
82
+ demo/food/14521898_82_IMG_9847.jpeg filter=lfs diff=lfs merge=lfs -text
83
+ outputs/uploaded/4.jpg filter=lfs diff=lfs merge=lfs -text
demo.py ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import random
3
+ import numpy as np
4
+ import torch
5
+ import torch.backends.cudnn as cudnn
6
+ import gradio as gr
7
+
8
+ from utils import load_json, init_logger
9
+ from demo import ConversationalAgent, CustomTheme
10
+
11
+ FOOD_EXAMPLES = "demo/food_for_demo.json"
12
+ # MODEL_PATH = "/root/share/new_models/OpenGVLab/InternVL2-2B"
13
+ MODEL_PATH = "/root/xtuner/work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/lr35_ep10"
14
+ OUTPUT_PATH = "./outputs"
15
+
16
+ def setup_seeds():
17
+ seed = 42
18
+
19
+ random.seed(seed)
20
+ np.random.seed(seed)
21
+ torch.manual_seed(seed)
22
+
23
+ cudnn.benchmark = False
24
+ cudnn.deterministic = True
25
+
26
+
27
+ def main():
28
+ setup_seeds()
29
+ # logging
30
+ init_logger(OUTPUT_PATH)
31
+ # food examples
32
+ food_examples = load_json(FOOD_EXAMPLES)
33
+
34
+ agent = ConversationalAgent(model_path=MODEL_PATH,
35
+ outputs_dir=OUTPUT_PATH)
36
+
37
+ theme = CustomTheme()
38
+
39
+ titles = [
40
+ """<center><B><font face="Comic Sans MS" size=10>书生大模型实战营</font></B></center>""" ## Kalam:wght@700
41
+ """<center><B><font face="Courier" size=5>「进阶岛」InternVL 多模态模型部署微调实践</font></B></center>"""
42
+ ]
43
+
44
+ language = """Language: 中文 and English"""
45
+ with gr.Blocks(theme) as demo_chatbot:
46
+ for title in titles:
47
+ gr.Markdown(title)
48
+ # gr.Markdown(article)
49
+ gr.Markdown(language)
50
+
51
+ with gr.Row():
52
+ with gr.Column(scale=3):
53
+ start_btn = gr.Button("Start Chat", variant="primary", interactive=True)
54
+ clear_btn = gr.Button("Clear Context", interactive=False)
55
+ image = gr.Image(type="pil", interactive=False)
56
+ upload_btn = gr.Button("🖼️ Upload Image", interactive=False)
57
+
58
+ with gr.Accordion("Generation Settings"):
59
+ top_p = gr.Slider(minimum=0, maximum=1, step=0.1,
60
+ value=0.8,
61
+ interactive=True,
62
+ label='top-p value',
63
+ visible=True)
64
+
65
+ temperature = gr.Slider(minimum=0, maximum=1.5, step=0.1,
66
+ value=0.8,
67
+ interactive=True,
68
+ label='temperature',
69
+ visible=True)
70
+
71
+ with gr.Column(scale=7):
72
+ chat_state = gr.State()
73
+ chatbot = gr.Chatbot(label='InternVL2', height=800, avatar_images=((os.path.join(os.path.dirname(__file__), 'demo/user.png')), (os.path.join(os.path.dirname(__file__), "demo/bot.png"))))
74
+ text_input = gr.Textbox(label='User', placeholder="Please click the <Start Chat> button to start chat!", interactive=False)
75
+ gr.Markdown("### 输入示例")
76
+ def on_text_change(text):
77
+ return gr.update(interactive=True)
78
+ text_input.change(fn=on_text_change, inputs=text_input, outputs=text_input)
79
+ gr.Examples(
80
+ examples=[["图片中的食物通常属于哪个菜系?"],
81
+ ["如果让你简单形容一下品尝图片中的食物的滋味,你会描述它"],
82
+ ["去哪个地方游玩时应该品尝当地的特色美食图片中的食物?"],
83
+ ["食用图片中的食物时,一般它上菜或摆盘时的特点是?"]],
84
+ inputs=[text_input]
85
+ )
86
+
87
+ with gr.Row():
88
+ gr.Markdown("### 食物快捷栏")
89
+ with gr.Row():
90
+ example_xinjiang_food = gr.Examples(examples=food_examples["新疆菜"], inputs=image, label="新疆菜")
91
+ example_sichuan_food = gr.Examples(examples=food_examples["川菜(四川,重庆)"], inputs=image, label="川菜(四川,重庆)")
92
+ example_xibei_food = gr.Examples(examples=food_examples["西北菜 (陕西,甘肃等地)"], inputs=image, label="西北菜 (陕西,甘肃等地)")
93
+ with gr.Row():
94
+ example_guizhou_food = gr.Examples(examples=food_examples["黔菜 (贵州)"], inputs=image, label="黔菜 (贵州)")
95
+ example_jiangsu_food = gr.Examples(examples=food_examples["苏菜(江苏)"], inputs=image, label="苏菜(江苏)")
96
+ example_guangdong_food = gr.Examples(examples=food_examples["粤菜(广东等地)"], inputs=image, label="粤菜(广东等地)")
97
+ with gr.Row():
98
+ example_hunan_food = gr.Examples(examples=food_examples["湘菜(湖南)"], inputs=image, label="湘菜(湖南)")
99
+ example_fujian_food = gr.Examples(examples=food_examples["闽菜(福建)"], inputs=image, label="闽菜(福建)")
100
+ example_zhejiang_food = gr.Examples(examples=food_examples["浙菜(浙江)"], inputs=image, label="浙菜(浙江)")
101
+ with gr.Row():
102
+ example_dongbei_food = gr.Examples(examples=food_examples["东北菜 (黑龙江等地)"], inputs=image, label="东北菜 (黑龙江等地)")
103
+
104
+
105
+ start_btn.click(agent.start_chat, [chat_state], [text_input, start_btn, clear_btn, image, upload_btn, chat_state])
106
+ clear_btn.click(agent.restart_chat, [chat_state], [chatbot, text_input, start_btn, clear_btn, image, upload_btn, chat_state], queue=False)
107
+ upload_btn.click(agent.upload_image, [image, chatbot, chat_state], [image, chatbot, chat_state])
108
+ text_input.submit(
109
+ agent.respond,
110
+ inputs=[text_input, image, chatbot, top_p, temperature, chat_state],
111
+ outputs=[text_input, image, chatbot, chat_state]
112
+ )
113
+
114
+ demo_chatbot.launch(share=True, server_name="127.0.0.1", server_port=1096, allowed_paths=['./'])
115
+ demo_chatbot.queue()
116
+
117
+
118
+ if __name__ == "__main__":
119
+ main()
demo/__init__.py ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ from demo.agent import ConversationalAgent
2
+ from demo.theme import CustomTheme
3
+
4
+
5
+ __all__ = [
6
+ "ConversationalAgent",
7
+ "CustomTheme",
8
+ ]
demo/__pycache__/__init__.cpython-310.pyc ADDED
Binary file (267 Bytes). View file
 
demo/__pycache__/agent.cpython-310.pyc ADDED
Binary file (3.4 kB). View file
 
demo/__pycache__/theme.cpython-310.pyc ADDED
Binary file (2.12 kB). View file
 
demo/agent.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import logging
3
+ from datetime import datetime
4
+
5
+ import gradio as gr
6
+ from PIL import Image
7
+
8
+ from lmdeploy import pipeline, TurbomindEngineConfig, GenerationConfig, ChatTemplateConfig
9
+ from lmdeploy.vl import load_image
10
+
11
+ class ConversationalAgent:
12
+ def __init__(self,
13
+ model_path,
14
+ outputs_dir) -> None:
15
+ self.pipe = pipeline(model_path,
16
+ chat_template_config=ChatTemplateConfig(model_name='internvl2-internlm2'),
17
+ backend_config=TurbomindEngineConfig(session_len=8192))
18
+ self.uploaded_images_storage = os.path.join(outputs_dir, "uploaded")
19
+ self.uploaded_images_storage = os.path.abspath(self.uploaded_images_storage)
20
+ os.makedirs(self.uploaded_images_storage, exist_ok=True)
21
+ self.sess = None
22
+
23
+ def start_chat(self, chat_state):
24
+ self.sess = None
25
+ self.context = ""
26
+ self.current_image_id = -1
27
+ self.image_list = []
28
+ self.pixel_values_list = []
29
+ self.seen_image_idx = []
30
+ logging.info("=" * 30 + "Start Chat" + "=" * 30)
31
+
32
+ return (
33
+ #gr.update(interactive=False), # [image] Image
34
+ gr.update(interactive=True, placeholder='input the text.'), # [input_text] Textbox
35
+ gr.update(interactive=False), # [start_btn] Button
36
+ gr.update(interactive=True), # [clear_btn] Button
37
+ gr.update(interactive=True), # [image] Image
38
+ gr.update(interactive=True), # [upload_btn] Button
39
+ chat_state # [chat_state] State
40
+ )
41
+
42
+ def restart_chat(self, chat_state):
43
+ self.sess = None
44
+ self.context = ""
45
+ self.current_image_id = -1
46
+ self.image_list = []
47
+ self.pixel_values_list = []
48
+ self.seen_image_idx = []
49
+
50
+ logging.info("=" * 30 + "End Chat" + "=" * 30)
51
+
52
+ return (
53
+ None, # [chatbot] Chatbot
54
+ #gr.update(value=None, interactive=True), # [image] Image
55
+ gr.update(interactive=False, placeholder="Please click the <Start Chat> button to start chat!"), # [input_text] Textbox
56
+ gr.update(interactive=True), # [start] Button
57
+ gr.update(interactive=False), # [clear] Button
58
+ gr.update(value=None, interactive=False), # [image] Image
59
+ gr.update(interactive=False), # [upload_btn] Button
60
+ chat_state # [chat_state] State
61
+ )
62
+
63
+ def upload_image(self, image: Image.Image, chat_history: gr.Chatbot, chat_state: gr.State):
64
+ logging.info(f"type(image): {type(image)}")
65
+
66
+ self.image_list.append(image)
67
+ save_image_path = os.path.join(self.uploaded_images_storage, "{}.jpg".format(len(os.listdir(self.uploaded_images_storage))))
68
+ image.save(save_image_path)
69
+ logging.info(f"image save path: {save_image_path}")
70
+ chat_history.append((gr.HTML(f'<img src="./file={save_image_path}" style="width: 200px; height: auto; display: inline-block;">'), "Received."))
71
+
72
+ return None, chat_history, chat_state
73
+
74
+ def respond(
75
+ self,
76
+ message,
77
+ image,
78
+ chat_history: gr.Chatbot,
79
+ top_p,
80
+ temperature,
81
+ chat_state,
82
+ ):
83
+ current_time = datetime.now().strftime("%b%d-%H:%M:%S")
84
+ logging.info(f"Time: {current_time}")
85
+ logging.info(f"User: {message}")
86
+ gen_config = GenerationConfig(top_p=top_p, temperature=temperature)
87
+ chat_input = message
88
+ if image is not None:
89
+ save_image_path = os.path.join(self.uploaded_images_storage, "{}.jpg".format(len(os.listdir(self.uploaded_images_storage))))
90
+ image.save(save_image_path)
91
+ logging.info(f"image save path: {save_image_path}")
92
+ chat_input = (message, image)
93
+ if self.sess is None:
94
+ self.sess = self.pipe.chat(chat_input, gen_config=gen_config)
95
+ else:
96
+ self.sess = self.pipe.chat(chat_input, session=self.sess, gen_config=gen_config)
97
+ response = self.sess.response.text
98
+ if image is not None:
99
+ chat_history.append((gr.HTML(f'{message}\n\n<img src="./file={save_image_path}" style="width: 200px; height: auto; display: inline-block;">'), response))
100
+ else:
101
+ chat_history.append((message, response))
102
+
103
+ logging.info(f"generated text = \n{response}")
104
+
105
+ return "", None, chat_history, chat_state
demo/bot.png ADDED
demo/food/14456664_117_IMG_8176.jpeg ADDED

Git LFS Details

  • SHA256: f844ef4ef78a325596a63ab702dafa0a67781348de8c12b58b9a9b655953ade1
  • Pointer size: 132 Bytes
  • Size of remote file: 2.64 MB
demo/food/14456664_126_86838F28-912B-42A4-80C1-BD060B649081.jpeg ADDED
demo/food/14456664_127_1E703639-9169-4EB4-8A5D-3B1E226F639B.jpeg ADDED

Git LFS Details

  • SHA256: ad9fa9010a5731ac6c0870bf2a572c406f0954b7d3bf3b5ca1f63c78863e7762
  • Pointer size: 132 Bytes
  • Size of remote file: 1.9 MB
demo/food/14456664_129_IMG_20220605_181308.jpg ADDED
demo/food/14456664_130_IMG_20220605_180820.jpg ADDED
demo/food/14456664_133_IMG_20220709_153436.jpg ADDED
demo/food/14456664_134_IMG_20220709_153652.jpg ADDED
demo/food/14456664_136_IMG_20220709_233905.jpg ADDED
demo/food/14456664_137_IMG_20220717_143941.jpg ADDED
demo/food/14456664_139_IMG_0917-EDIT.jpg ADDED
demo/food/14456664_141_IMG_1724.jpg ADDED
demo/food/14456664_147_IMG_20190225_184723.jpg ADDED
demo/food/14456664_149_IMG_20180812_182400.jpg ADDED
demo/food/14456664_14_IMG_20220721_150241.jpg ADDED

Git LFS Details

  • SHA256: df1c0a0fa513ed03b735318e47c7393a7761bf46a33ab60b9f9d3898355e71e2
  • Pointer size: 132 Bytes
  • Size of remote file: 3.95 MB
demo/food/14456664_150_IMG_20181218_190852.jpg ADDED
demo/food/14456664_153_IMG_20240411_102841.jpg ADDED

Git LFS Details

  • SHA256: 2b151c68460ea7bc0fc85d91535a2bc94ed88dcf4d761046d2a37722c5bfa5f5
  • Pointer size: 132 Bytes
  • Size of remote file: 1.93 MB
demo/food/14456664_155_IMG_20240403_094547.jpg ADDED

Git LFS Details

  • SHA256: 65b3e7f66dbace96b3f790e17c38abedddfa07bf886e1d5c8159feb30352e5b6
  • Pointer size: 132 Bytes
  • Size of remote file: 2.27 MB
demo/food/14456664_158_IMG_20240416_141427.jpg ADDED

Git LFS Details

  • SHA256: f622069e0add72f4e778af7c223922a66dc1478ed13a1458dd3455ae3fe04495
  • Pointer size: 132 Bytes
  • Size of remote file: 2.9 MB
demo/food/14456664_159_IMG_20240416_140243.jpg ADDED

Git LFS Details

  • SHA256: ce5bf8987b1bb99fb874a8ba8043952c2a03d6593d28447d44f09d4814402124
  • Pointer size: 132 Bytes
  • Size of remote file: 2.81 MB
demo/food/14456664_187_mmexport1713446177339.jpg ADDED

Git LFS Details

  • SHA256: a8fa2b9fe1ef98e53d61be59061e848e7338b09e5d3f8e01fb376b877698461b
  • Pointer size: 132 Bytes
  • Size of remote file: 1 MB
demo/food/14456664_19_IMG_0395.jpeg ADDED

Git LFS Details

  • SHA256: d3776a76f3612ab93123499a7fdb8bfabaad2596ee76eca754f4806fd404bc89
  • Pointer size: 132 Bytes
  • Size of remote file: 3.11 MB
demo/food/14456664_201_mmexport1713452408322.jpg ADDED
demo/food/14456664_217_IMG_3854.jpeg ADDED

Git LFS Details

  • SHA256: d6ee11d0137ab40d9c1bf743535cbd163e00c6de5fd69022febfd55a4abae610
  • Pointer size: 132 Bytes
  • Size of remote file: 4.98 MB
demo/food/14456664_22_IMG_20240404_135935.jpg ADDED

Git LFS Details

  • SHA256: f4f79f735255036164c0dac6d5cff946ef36a765eeed815992e437a1f48aa12b
  • Pointer size: 132 Bytes
  • Size of remote file: 3.19 MB
demo/food/14456664_236_IMG_4742.jpeg ADDED

Git LFS Details

  • SHA256: a25050eff6c82d7dac7cbd2fb7e37eec886867b512e6ea0390c40cf7ca961338
  • Pointer size: 132 Bytes
  • Size of remote file: 2.4 MB
demo/food/14456664_238_d370e16ff482d13a0718c6fb4cd7ffbb.jpeg ADDED
demo/food/14456664_239_mmexport1713518196678.jpg ADDED
demo/food/14456664_26_IMG_3472.jpeg ADDED
demo/food/14456664_34_IMG_0400.jpeg ADDED

Git LFS Details

  • SHA256: 7fd191af0a76621edeb10abe04cc952bb03c761b2abc733e5fe5474639d7b0e2
  • Pointer size: 132 Bytes
  • Size of remote file: 1.81 MB
demo/food/14456664_36_20240410160819.jpg ADDED
demo/food/14456664_40_IMG_20170613_190017.jpg ADDED

Git LFS Details

  • SHA256: d813465ccf81c04c65d7dbab663b2948ac4298e31bda62d0bd0df5dcb90e539d
  • Pointer size: 132 Bytes
  • Size of remote file: 3.05 MB
demo/food/14456664_41_IMG_20190216_124017.jpeg ADDED
demo/food/14456664_50_mmexport1712821641752.jpg ADDED
demo/food/14456664_61_mmexport1550554859117.jpg ADDED

Git LFS Details

  • SHA256: d95fbbf0cce24c3a8779a87216e4ece91af058b443129696405e7384705b9037
  • Pointer size: 132 Bytes
  • Size of remote file: 2.25 MB
demo/food/14456664_64_IMG_20240409_181047.jpg ADDED

Git LFS Details

  • SHA256: 070c656fa584ccf2331c37fa4e780381bab3b0d808aea54cba406fd66b7735bb
  • Pointer size: 132 Bytes
  • Size of remote file: 2.68 MB
demo/food/14456664_68_IMG_0971.jpeg ADDED

Git LFS Details

  • SHA256: 1ae462fcb5b73a7c228ee775b08fe84827a383e9f663e2c31c1ef4c086a67c03
  • Pointer size: 132 Bytes
  • Size of remote file: 2.79 MB
demo/food/14456664_70_IMG_0581.jpeg ADDED

Git LFS Details

  • SHA256: 05a32a6d8ce58c42a4ba4e852fabc9b326b1b66937ade06ed0251ea6408f4571
  • Pointer size: 132 Bytes
  • Size of remote file: 1.81 MB
demo/food/14456664_72_IMG_0618.jpeg ADDED

Git LFS Details

  • SHA256: 57b49b974c7b966ac2042e4efa506c5b55a9e6038ba7f1bb76434a97b5e06fe7
  • Pointer size: 132 Bytes
  • Size of remote file: 2.48 MB
demo/food/14456664_80_IMG_6323.jpeg ADDED

Git LFS Details

  • SHA256: 7a71fe70bfd223397ab7f0af42159ac501d787d99bbbbf61165b2f11e6f6ba0a
  • Pointer size: 132 Bytes
  • Size of remote file: 3.67 MB
demo/food/14456664_82_MVIMG_20240413_161454.jpeg ADDED
demo/food/14456664_87_IMG_5316.jpeg ADDED

Git LFS Details

  • SHA256: beadadd5d26749545b59159f8914f4a6ca9602f9a37c18f9ae6d578c62717eec
  • Pointer size: 132 Bytes
  • Size of remote file: 3.14 MB
demo/food/14456664_88_wx_camera_1712730236546.jpg ADDED

Git LFS Details

  • SHA256: cdc6b744e764770bff3cf73f7fb9bbe1424f88e59b4e22bb238c8765aec90483
  • Pointer size: 132 Bytes
  • Size of remote file: 1.29 MB