add remove_bg function
This commit is contained in:
@@ -13,7 +13,7 @@
|
|||||||
<div id="status"></div>
|
<div id="status"></div>
|
||||||
<div id="bottom_bar">
|
<div id="bottom_bar">
|
||||||
<div id="form">
|
<div id="form">
|
||||||
<input id="input" autocomplete="off" />
|
<input id="input" autocomplete="off" placeholder="Drag an image here to send image" />
|
||||||
<button id="send_button">Send</button>
|
<button id="send_button">Send</button>
|
||||||
<button id="reset_button">ClearMemory</button>
|
<button id="reset_button">ClearMemory</button>
|
||||||
<button id="test_button">AutoTest</button>
|
<button id="test_button">AutoTest</button>
|
||||||
|
|||||||
@@ -187,5 +187,36 @@
|
|||||||
if (e.key === 'Enter') {
|
if (e.key === 'Enter') {
|
||||||
submitMessage();
|
submitMessage();
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
|
input.addEventListener('drop', function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
|
const files = e.dataTransfer.files;
|
||||||
|
for (let i = 0; i < files.length; i++) {
|
||||||
|
const file = files[i];
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onload = function(e) {
|
||||||
|
const file = e.currentTarget.result;
|
||||||
|
if (file.startsWith('data:image')) {
|
||||||
|
const base64Index = file.indexOf('base64,');
|
||||||
|
const base64Content = file.substring(base64Index + 7)
|
||||||
|
// Send to jarvis
|
||||||
|
socket.emit(
|
||||||
|
"chat_message",
|
||||||
|
makeChatMessage(base64Content, 'image')
|
||||||
|
);
|
||||||
|
|
||||||
|
// display on the page
|
||||||
|
var item = document.createElement("li");
|
||||||
|
item.innerHTML = `<img src="${file}" alt="Image" class="replied-img">`;
|
||||||
|
item.classList.add("align_right");
|
||||||
|
messages.appendChild(item);
|
||||||
|
scrollElementToEnd(messages);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
reader.readAsDataURL(file);
|
||||||
|
}
|
||||||
|
});
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ RUN echo "openai==0.27.6" >> requirements.txt \
|
|||||||
&& echo "llama-index==0.6.7" >> requirements.txt \
|
&& echo "llama-index==0.6.7" >> requirements.txt \
|
||||||
&& echo "youtube-transcript-api==0.6.0" >> requirements.txt \
|
&& echo "youtube-transcript-api==0.6.0" >> requirements.txt \
|
||||||
&& echo "tweepy==4.14.0" >> requirements.txt \
|
&& echo "tweepy==4.14.0" >> requirements.txt \
|
||||||
|
&& echo "rembg==2.0.45" >> requirements.txt \
|
||||||
&& echo "google-api-python-client==2.86.0" >> requirements.txt \
|
&& echo "google-api-python-client==2.86.0" >> requirements.txt \
|
||||||
&& echo "google-auth-httplib2==0.1.0" >> requirements.txt \
|
&& echo "google-auth-httplib2==0.1.0" >> requirements.txt \
|
||||||
&& echo "google-auth-oauthlib==1.0.0" >> requirements.txt
|
&& echo "google-auth-oauthlib==1.0.0" >> requirements.txt
|
||||||
|
|||||||
@@ -18,6 +18,12 @@ class CallerContext:
|
|||||||
return f"{of}"
|
return f"{of}"
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
def get_last_image(self) -> str:
|
||||||
|
raise NotImplementedError("Function not implemented")
|
||||||
|
|
||||||
|
def set_last_image(self, img: str):
|
||||||
|
raise NotImplementedError("Function not implemented")
|
||||||
|
|
||||||
async def reply_text(self, msg):
|
async def reply_text(self, msg):
|
||||||
raise NotImplementedError("Function not implemented")
|
raise NotImplementedError("Function not implemented")
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ class Session(CallerContext):
|
|||||||
_sio: SioConnection = None
|
_sio: SioConnection = None
|
||||||
_session_id: str = None
|
_session_id: str = None
|
||||||
_tz_offset: int = 0 # timezone offset, in hours. = local_time - UTC0
|
_tz_offset: int = 0 # timezone offset, in hours. = local_time - UTC0
|
||||||
|
_last_image: str = None
|
||||||
|
|
||||||
_history_dir: str = None
|
_history_dir: str = None
|
||||||
|
|
||||||
@@ -163,6 +164,12 @@ class Session(CallerContext):
|
|||||||
def get_tz_offset(self):
|
def get_tz_offset(self):
|
||||||
return self._tz_offset
|
return self._tz_offset
|
||||||
|
|
||||||
|
def get_last_image(self) -> str:
|
||||||
|
return self._last_image
|
||||||
|
|
||||||
|
def set_last_image(self, img: str):
|
||||||
|
self._last_image = img
|
||||||
|
|
||||||
async def reply_text(self, msg):
|
async def reply_text(self, msg):
|
||||||
if self._message_id_ is None:
|
if self._message_id_ is None:
|
||||||
raise function_error.FunctionError(function_error.EC_RESET, "Reset")
|
raise function_error.FunctionError(function_error.EC_RESET, "Reset")
|
||||||
|
|||||||
@@ -109,6 +109,8 @@ def run_server_mode():
|
|||||||
session.set_tz_offset(offset)
|
session.set_tz_offset(offset)
|
||||||
elif msg.message_type == 'text':
|
elif msg.message_type == 'text':
|
||||||
await session.on_chat_message(msg)
|
await session.on_chat_message(msg)
|
||||||
|
elif msg.message_type == 'image':
|
||||||
|
session.set_last_image(msg.message_content)
|
||||||
|
|
||||||
app.router.add_static('/js', './TestPage/js')
|
app.router.add_static('/js', './TestPage/js')
|
||||||
app.router.add_static('/css', './TestPage/css')
|
app.router.add_static('/css', './TestPage/css')
|
||||||
@@ -156,6 +158,8 @@ async def run_client_mode(session_map: dict[str, Session]):
|
|||||||
session.set_tz_offset(offset)
|
session.set_tz_offset(offset)
|
||||||
elif msg.message_type == 'text':
|
elif msg.message_type == 'text':
|
||||||
await session.on_chat_message(msg)
|
await session.on_chat_message(msg)
|
||||||
|
elif msg.message_type == 'image':
|
||||||
|
session.set_last_image(msg.message_content)
|
||||||
|
|
||||||
await sio.connect(CFG.bot_server_url)
|
await sio.connect(CFG.bot_server_url)
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ python-dotenv==1.0.0
|
|||||||
llama-index==0.6.7
|
llama-index==0.6.7
|
||||||
youtube-transcript-api==0.6.0
|
youtube-transcript-api==0.6.0
|
||||||
tweepy==4.14.0
|
tweepy==4.14.0
|
||||||
|
rembg==2.0.45
|
||||||
|
|
||||||
google-api-python-client==2.86.0
|
google-api-python-client==2.86.0
|
||||||
google-auth-httplib2==0.1.0
|
google-auth-httplib2==0.1.0
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
import io
|
||||||
|
import base64
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from jarvis.functional_modules.caller_context import CallerContext
|
||||||
|
from jarvis.functional_modules.functional_module import functional_module
|
||||||
|
from jarvis.logger import logger
|
||||||
|
|
||||||
|
|
||||||
|
def reg_or_not():
|
||||||
|
try:
|
||||||
|
from rembg import new_session, remove
|
||||||
|
from PIL import Image
|
||||||
|
except ImportError as e:
|
||||||
|
logger.warn(f"rembg or PIL not installed, remove_bg will not be available")
|
||||||
|
return
|
||||||
|
|
||||||
|
session = new_session(model_name="u2net")
|
||||||
|
|
||||||
|
@functional_module(
|
||||||
|
name="remove_bg",
|
||||||
|
description="Remove the background of last image",
|
||||||
|
signature={})
|
||||||
|
async def remove_bg(context: CallerContext):
|
||||||
|
img_base64 = context.get_last_image()
|
||||||
|
if img_base64 is None:
|
||||||
|
await context.reply_text("You need to give me an image first")
|
||||||
|
return "Failed"
|
||||||
|
bytes_io = io.BytesIO(base64.b64decode(img_base64))
|
||||||
|
img = Image.open(bytes_io)
|
||||||
|
output = remove(img, session=session)
|
||||||
|
output_bytesio = io.BytesIO()
|
||||||
|
output.save(output_bytesio, 'PNG')
|
||||||
|
output_bytes = output_bytesio.getvalue()
|
||||||
|
result = base64.b64encode(output_bytes).decode()
|
||||||
|
|
||||||
|
context.set_last_image(result)
|
||||||
|
await context.reply_image_base64(result)
|
||||||
|
return "Success"
|
||||||
|
|
||||||
|
reg_or_not()
|
||||||
@@ -260,6 +260,7 @@ NOTE: Just reply using these information, don't ask me anything.
|
|||||||
logger.debug("Start calling stable_diffusion")
|
logger.debug("Start calling stable_diffusion")
|
||||||
img = await call_sd(sd_params)
|
img = await call_sd(sd_params)
|
||||||
logger.debug("End calling stable_diffusion")
|
logger.debug("End calling stable_diffusion")
|
||||||
|
context.set_last_image(img)
|
||||||
await context.reply_image_base64(img)
|
await context.reply_image_base64(img)
|
||||||
return "Success"
|
return "Success"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user